Java BigDecimal问题

时间:2016-06-24 20:20:00

标签: java decimalformat

我想转换String" 0.955000"至" 0.96"使用Java DecimalFormat

这是我的代码段:

String inputVal = "0.955000";
DecimalFormat decFmt = new DecimalFormat("0.00")
decFmt.setRoundingMode(RoundingMode.HALF_UP);
String outputVal = decFmt.format(Double.valueof(inputVal));

这里我得到输出值为" 0.95"。 我期待输出为" 0.96"。有谁知道我的代码中有什么问题? 有没有办法,我可以得到" 0.96"使用十进制格式。

2 个答案:

答案 0 :(得分:2)

这是我尝试过的代码:

import java.math.RoundingMode;
import java.text.DecimalFormat;


public class Test
{
  public static void main(String[] args)
  {
    String inputVal      = "0.955000";
    DecimalFormat decFmt = new DecimalFormat("0.00");
    decFmt.setRoundingMode(RoundingMode.HALF_UP);
    String outputVal = decFmt.format(Double.valueOf(inputVal));
    System.out.println(outputVal);
  }
}

我使用jdk 7获得的输出是0.96但是使用jdk 8我得到了0.95。

原因如下:0.955 as double是:IEEE二进制格式的0.9549999833106995

圆形上半部分将变为:0.95,这是正确的答案。

答案 1 :(得分:0)

发现了这个问题。早些时候我尝试使用Java 7并且获得了0.96。现在更改为Java 8后,我得到了0.95。我认为这是一个Java版本的问题。对于十进制格式,Java 7和8的行为方式不同。