1

I am trying to round big numbers to the nearest 1 hundred, by dividing by 100, rounding and then multiplying by 100.

However, the big number values are losing value when converting to floats.

This is the problem part:

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

Output:

99222049     992220.500000

Would like it to be:

99222049     992220.49

Sorry if this is a stupid question! Would be grateful for advice. Thanks.

4

3 回答 3

3

您的基本问题是浮点舍入。您不能将任意小数表示为浮点数(或双精度数)。在二进制中, 1/ 10 是 0.00011001100110011...它永远不会终止,就像 1/3 是 0.33333... 在十进制中一样。因此,如果您希望结果以 10 为底很好地舍入,您需要以 10 为底,而不是 2 为底进行工作。Cocoa 中有两种方法:

你可以纯粹用整数数学来完成你的工作,没有浮点数。有关如何执行此操作的示例,请参阅在 C 中将整数舍入到最接近的十或一百。

或者,由于这是 ObjC,您可以使用NSDecimalNumber,这将允许您以 10 为基数执行所有数学运算。

于 2013-11-13T15:04:51.257 回答
1

您需要将浮点数更改为双精度数。

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

输出:

99222049     992220.490000
于 2013-11-13T15:04:08.607 回答
0

将您的代码更改为此,输出应如您所愿。我在 f 之前将 float 更改为 double 和 .2 以仅显示 2 位小数。

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

这是控制台中显示的内容

99222049     992220.49

我希望这会有所帮助,干杯,吉姆。

于 2013-11-13T15:13:20.230 回答