【发布时间】:2013-07-21 23:10:31
【问题描述】:
我在 java 中舍入 BigDecimals 时遇到了一些问题。 我正在尝试将值从英尺转换为英寸,反之亦然,这就是我所拥有的:
//To convert from ft to in;
//...
BigDecimal CINCH = new BigDecimal("12");
Inch.setText(CINCH.multiply(VFEET).toString()); //VFEET is the user input
//To convert from in to ft
//...
BigDecimal CFEET = new BigDecimal("12"); //Initially I multiplied the input with 0.0833333333
Feet.setText(VINCH.divide(CFEET, 7, RoundingMode.HALF_UP).toString()); //VINCH is the user input
如果我尝试将 1 英尺转换为英寸,它会返回预期值 (12)。 如果我尝试将 12 英寸转换为英尺,它会返回预期值 (1),但会像我预期的那样使用 7 位小数。
如果我将 1 英寸转换为英尺,它会返回 0.08333333,如果我将此值从英尺转换为英寸,它应该返回 1,但它却返回 0.9999996。 如果我将 2 英寸转换为英尺,则返回 0.1666667,如果我将此值从英尺转换为英寸,则返回 2.0000004
我该如何解决这个问题? (我知道我可以用双打来做到这一点,这是我的第一个计划,但我遇到了一个准确性问题(比这个更大))
【问题讨论】:
-
如何摆脱舍入,即使用 RoundingMode.UNNECESSARY?
-
双打实际上是测量的正确答案。小数应该用于具有精确数字数量的事物,例如财务价值。请参阅ericlippert.com/2013/07/18/…,尽管它并没有专门解决您的问题。
-
@Juvanis 我尝试使用 RoundingMode.UNNECESSARY...当我尝试转换时程序崩溃...(我尝试将 1 in 转换为 ft)
-
@tvanfosson 我尝试了双打,它确实有效!当我将 1 in 转换为 ft 并将返回值再次转换为 in 时,它返回了正确的值!它解决了它!我没有写在问题中,但是我在将 1 米(或 dm/cm/mm)转换为皮米时遇到了双打问题。
-
您可能想尝试使用Rational,它不会进行任何舍入
标签: java rounding bigdecimal