gpt4 book ai didi

java - 是否有一种舍入算法可以取消以 2 为基数的转换并推断精度? *希望在Java中*

转载 作者:行者123 更新时间:2023-11-29 03:50:44 26 4
gpt4 key购买 nike

如果我有一个像 3.01 这样的数字,计算机似乎认为最好的 double 是 64 位数字:

3.0099999999999997868371792719699442386627197265625

有没有比寻找四个以上的 9 或 0 更好的方法,我可以一般地“四舍五入”到精确的基数 10 表示?

是否有一种算法可以采用 3.00999999... 困惑并返回 3.01 而无需我指定我想要的精度。

我认为我处理的大多数数字应该足够小,64 位不会有歧义。

最佳答案

否 - 因为可能您可能实际上已将 3.009999999999997868 指定为输入数字,并且不希望将相同的值四舍五入为 3.01。基本上,从十进制值转换为二进制 float 时,您丢失了信息 - 您无法取回该信息。

如果您对十进制值感兴趣而不仅仅是大小,您应该考虑使用 BigDecimal 而不是 double。 (这些值代表什么?)

编辑:如其他答案所述,当您只使用 toString 时,Java 无论如何都会给您 3.01,但是您得到了原始值。这在 Double.toString 中指定:

How many digits must be printed for the fractional part of m or a? There must be at least one digit to represent the fractional part, and beyond that as many, but only as many, more digits as are needed to uniquely distinguish the argument value from adjacent values of type double. That is, suppose that x is the exact mathematical value represented by the decimal representation produced by this method for a finite nonzero argument d. Then d must be the double value nearest to x; or if two double values are equally close to x, then d must be one of them and the least significant bit of the significand of d must be 0.

如果这对您来说足够好,它会让生活更轻松……但听起来您应该从根本上考虑它。

关于java - 是否有一种舍入算法可以取消以 2 为基数的转换并推断精度? *希望在Java中*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8922892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com