Java BigDecimal Issue



我想使用Java Decimalformat

将字符串" 0.955000"转换为" 0.96"

这是我的代码段:

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"。

这是我尝试的代码:

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是:0.9549999833106995 IEEE二进制格式

圆的一半将变为:0.95,这是正确的答案。

找到了此问题。早些时候,我正在尝试使用Java 7,并获得0.96。现在,在更改为Java 8之后,我将其视为0.95。我认为这是Java版本问题。Java 7和8对于小数格式的行为不同。

相关内容

  • 没有找到相关文章

最新更新