我试图将大数字舍入到最接近的100,再除以100,舍入再乘以100。
然而,转换为浮动时,大数值正在失去价值。
这是问题部分:
int bigInt = 99222049;
float bigFloat = bigInt / 100.0;
NSLog(@"%d %f", bigInt, bigFloat);
输出:
99222049 992220.500000
希望如此:
99222049 992220.49
对不起,如果这是一个愚蠢的问题!将不胜感激。感谢。
答案 0 :(得分:3)
你的基本问题是浮动舍入。您不能将任意小数表示为浮点数(或双精度数)。在二进制文件中,1/10 is 0.00011001100110011...它永远不会终止,就像1/3是0.33333 ...十进制。因此,如果您希望结果在基数10中很好地进行,那么您需要在基数10而不是基数2中进行工作。在Cocoa中有两种方法:
你可以纯粹使用整数数学,没有浮点数来完成你的工作。有关如何执行此操作的示例,请参阅Rounding integers to nearest ten or hundred in C。
或者,由于这是ObjC,您可以使用NSDecimalNumber
,这将允许您在基数10中执行所有数学运算。
答案 1 :(得分:1)
您需要将浮动更改为双倍。
int bigInt = 99222049;
double bigFloat = bigInt / 100.0;
NSLog(@"%u %f", bigInt, bigFloat);
输出:
99222049 992220.490000
答案 2 :(得分:0)
将代码更改为此,输出应根据需要显示。我将浮点数更改为双精度,并且在f之前将.2更改为仅显示2位小数。
int bigInt = 99222049;
double bigFloat = bigInt / 100.0;
NSLog(@"%d %.2f", bigInt, bigFloat);
这是在控制台中显示的内容
99222049 992220.49
我希望这有助于,欢呼,吉姆。