ste*_*lla 2 java floating-point
我已经看过这个答案了。
的行为让我有点困惑BigDecimal.valueOf(float)
。这是示例:
System.out.println(BigDecimal.valueOf(20.2f)); //prints 20.200000762939453
Run Code Online (Sandbox Code Playgroud)
所以
float f = BigDecimal.valueOf(20.2f)
.setScale(2, RoundingMode.UP)
.floatValue();
System.out.println(f); //prints 20.21
Run Code Online (Sandbox Code Playgroud)
这绝对不是我预期的行为。有没有办法round up
正确浮动避免此类错误?
有关浮点数及其如何利用分配的位的描述,请参阅 java 中有多少有效数字具有浮点数和双精度数?
BigDecimal 工作正常,并且——正如预期的那样——保留它收到的所有数字,但它无法猜测给定参数的精度。所以:
float f = 20.20f;
System.out.println("Float: "+f);
System.out.println("BigDecimal.valueOf: "+BigDecimal.valueOf(f));
System.out.println("BigDecimal from value: "+new BigDecimal(f, MathContext.DECIMAL32));
System.out.println("BigDecimal from string: "+new BigDecimal(""+f));;
Run Code Online (Sandbox Code Playgroud)
印刷:
Float: 20.2
BigDecimal.valueOf: 20.200000762939453
BigDecimal from value: 20.20000
BigDecimal from string: 20.2
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
557 次 |
最近记录: |