java - 如何使用 BigDecimal.ROUND_HALF_UP 将 0.745 舍入到 0.75?

标签 java bigdecimal rounding

我尝试了以下,

   double doubleVal = 1.745;
   double doubleVal1 = 0.745;
   BigDecimal bdTest = new BigDecimal(  doubleVal);
   BigDecimal bdTest1 = new BigDecimal(  doubleVal1 );
   bdTest = bdTest.setScale(2, BigDecimal.ROUND_HALF_UP);
   bdTest1 = bdTest1.setScale(2, BigDecimal.ROUND_HALF_UP);
   System.out.println("bdTest:"+bdTest); //1.75
   System.out.println("bdTest1:"+bdTest1);//0.74    problemmmm ????????????  

但得到了奇怪的结果。为什么?

最佳答案

永远不要从 float 或 double 构造 BigDecimals。从整数或字符串构造它们。 float 和加倍松散精度。

此代码按预期工作(我只是将类型从 double 更改为 String):

public static void main(String[] args) {
  String doubleVal = "1.745";
  String doubleVal1 = "0.745";
  BigDecimal bdTest = new BigDecimal(  doubleVal);
  BigDecimal bdTest1 = new BigDecimal(  doubleVal1 );
  bdTest = bdTest.setScale(2, BigDecimal.ROUND_HALF_UP);
  bdTest1 = bdTest1.setScale(2, BigDecimal.ROUND_HALF_UP);
  System.out.println("bdTest:"+bdTest); //1.75
  System.out.println("bdTest1:"+bdTest1);//0.75, no problem
}

关于java - 如何使用 BigDecimal.ROUND_HALF_UP 将 0.745 舍入到 0.75?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12460482/

相关文章:

java - 单行双空检查

ruby-on-rails-4 - Rails NoMethodError : undefined method new for BigDecimal:Class

ruby - 你如何在 JRuby 中将 float 四舍五入到小数点后两位?

SQL Server DATEDIFF 将 YEAR 差值四舍五入。如何舍入?

java - 反转每个奇数字符串并将它们加在一起

java - java中扫描线多边形填充算法的问题

java - 运行新的 jar 文件时来自 openjdk 的 fatal error

java - Java 的 BigDecimal 是否像 C++ 中的 long double 那样利用硬件架构?

java - BigDecimal HALF_UP 舍入问题

java - BigDecimal setScale 方法的工作方式与我期望的完全相反