将大数字舍入到最接近的数字,浮动正在失去价值

时间:2013-11-13 14:56:12

标签: ios objective-c

我试图将大数字舍入到最接近的100,再除以100,舍入再乘以100。

然而,转换为浮动时,大数值正在失去价值。

这是问题部分:

int bigInt = 99222049;
float bigFloat = bigInt / 100.0;
NSLog(@"%d     %f", bigInt, bigFloat);

输出:

99222049     992220.500000

希望如此:

99222049     992220.49

对不起,如果这是一个愚蠢的问题!将不胜感激。感谢。

3 个答案:

答案 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

我希望这有助于,欢呼,吉姆。