我正在尝试对 BigDecimal 类实施新的成绩四舍五入,并且我遇到了一个可能的错误,我可能做错了什么。下面的代码暴露了我的问题:
public static void main(String[] args) throws IOException {
BigDecimal valDouble = new BigDecimal(0.35);
valDouble = valDouble.setScale(1, BigDecimal.ROUND_HALF_UP);
System.out.println(valDouble.doubleValue()); // prints 0.3
BigDecimal valString = new BigDecimal(new String("0.35"));
valString = valString.setScale(1, BigDecimal.ROUND_HALF_UP);
System.out.println(valString.doubleValue()); // prints 0.4
}
我的疑问是,BigDecimal 对于 double 和 String 构造函数是否不同?
我无法理解这个“错误”,至少,我只是使用了一个简单的字符串 concat 来“解决”它,如下所示:
BigDecimal valDouble = new BigDecimal("" + 0.35);
知道是什么导致了这种奇怪的行为吗?