【发布时间】:2011-07-25 01:12:09
【问题描述】:
我无法使用常见的 0.5 规则实现浮点数的舍入。
让我们准确点......我怎么能做这样的回合:
- x.x2 -> x.x
- x.x5 -> x.x(或者 x.x+1 也可以)
- x.x6 -> x.x+1
例如:
- 1.12 -> 1.1
1.22 -> 1.2
1.15 -> 1.1(或 1.2 也不错)
1.25 -> 1.2(或 1.3 也不错)
1.16 -> 1.2
- 1.26 -> 1.3
我尝试了这些方法(可能是错误的方式):
- NSNumberFormatter
- NSDecimalNumber
- ...
但没有什么能给出这样的结果。我总是得到一些 x.x99999999 的结果,或者是四舍五入的结果(太高、太低,或者在四舍五入的数字应该在上面的时候出现在偶数上)。
【问题讨论】:
-
既然你提到了
x.x99999999结果,你可以尝试使用%.1f格式化printf。 -
迈克说了什么;听起来像是经典的“浮点数以 2 为底而不是以 10 为底”的问题。
-
顺便说一句,“当四舍五入的数字应该放在上面的时候,偶数”是通常的做法,这样四舍五入不会对一系列数字的平均值产生小的正向偏移. (例如,由于 x = 0.0 不四舍五入,0.0
-
@Mike DeSimone:没错,但据我所知,这在大型系统中并不常见。
标签: objective-c c floating-point rounding