我想使用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对于小数格式的行为不同。