我无法在 java 文档或引用中看到它指定结果双精度数的任何地方,例如 12.875376,在调用诸如 Math.ceil() 之类的东西后会有什么精度。
我试过了,我得到了小数点后 1 位,但有人知道任何关于此的明确规范吗?或者至少我应该确信在不同的平台上总是会出现这种情况,等等。
我在测试中遇到了这个问题( Math.ceil(17.5638) 是否导致 1> 18.0 或 2> 18.0000 )。
干杯。
我无法在 java 文档或引用中看到它指定结果双精度数的任何地方,例如 12.875376,在调用诸如 Math.ceil() 之类的东西后会有什么精度。
我试过了,我得到了小数点后 1 位,但有人知道任何关于此的明确规范吗?或者至少我应该确信在不同的平台上总是会出现这种情况,等等。
我在测试中遇到了这个问题( Math.ceil(17.5638) 是否导致 1> 18.0 或 2> 18.0000 )。
干杯。
显示的“精度”实际上更多是由于将具有整数值的双精度转换为字符串时呈现的格式。由于Math.ceil
返回一个等于整数的值,并且 IEEE 754 双精度可以以完美的精度表示高达 +/- 2^53 的整数,因此正确的答案是“完美的精度”。
如何将整数值双精度数表示为字符串完全是一个不同的问题,我怀疑它会非常依赖于语言。
Math.ceil(x)
对 的所有值都是准确的x
。Ifx
太大或太负,以至于下一个整数可能无法精确表示,x
幅度如此之大,以至于所有可表示的数字,包括x
,都是整数,它是它自己的上限。
考虑到准确性,唯一的问题是转换为输出的字符串如何处理整数值双精度数。如有必要,可以使用 DecimalFormat 进行更改。
正如 Math javadocs 所说,ceil 返回一个等于数学整数的值。谈论它的精度是没有意义的。正好是 18。至于 18.0 或 18.00,这只是其字符串表示的问题。例如,您可以将其设为 18.000。至于测试中的问题,我认为这是完全不正确的。