我有一个浮点值,我希望以格式字符串显示它,如果它对应于一个int,则显示整数,如果没有,则显示一个小数。
像这样:
3.1
3
2.9
2.8
现在我陷入困境,在这个概念中,我会做那样的事情:
float myFloat = 3.1
float mySecondFloat = 3
[NSString stringWithFormat:@"%g %g", myFloat, mySecondFloat];
我的问题是:
1 /类型格式“%g”在大多数情况下有效,但有时我的结果显示为“0.600001”,而实际上应该有0.6,因为我所做的只是0.7 - 0.1。
是否有一种类型转换为浮点数为1位小数或者可能是按位运算以消除最终的不精确度,或其他方式使其在100%的情况下有效?
感谢您的回答。
答案 0 :(得分:1)
您必须使用此代码:
float myFloat = 3.1
float mySecondFloat = 3
[NSString stringWithFormat:@"%.1f %.1f", myFloat, mySecondFloat];
编辑:
如果我真的想打印浮点数的整数值,我会这样做(丑陋的代码)
int intValue = myFloatNumber/1;
NSString *string;
if(myFloatNumber == intValue)
{
string = [NSString stringWithFormat:@"%.0f", myFloatValue];
}
else
{
string = [NSString stringWithFormat:@"%.1f", myFloatValue];
}
将整数除以1,您自动将浮点数转换为int。 获得NSString *字符串后,您可以将其连接到字符串。
答案 1 :(得分:1)
如果使用十进制数字时需要绝对精确度,可以考虑使用NSDecimalNumber
类。
Number and Value Programming Topics: Using Decimal Numbers
否则,%.1g
格式说明符就可以了。
答案 2 :(得分:0)
看到别人的答案,似乎没有标准的C格式化程序来实现这一点。
我去了Nicolas的回答(NSDecimalNumber),因此解决了标志。它确实工作得很好,但是,在我(非常简单)的情况下,它可能有点矫枉过正。给我第二个想法,如果我不得不再做一次,我想我会在NSNumber上使用NSNumberFormatter(使用numberWithFloat:方法)
如果它可以帮助某人......