Java 舍入( double )

标签 java double rounding

double y1 = 0;  
double y2 = 0;  
double i = 0.025;  
double n = 2;  
double h1 = 2000; 
double h2 = 4000; 

y1 = Math.pow((1 + i), n) * h1;
y2 = Math.pow((1 + i), n) * h2;
double result =  y1 + y2;
System.out.println(result);

我希望结果为“6303.749999999999”,但它给了我“6303.75”。我该如何解决?

最佳答案

正确的结果应该是(而且确实是) 6303.750000000000017069679003611781820568916563219777423023367655509563911228609889292329171439632773399353027343750000

尝试看一下 BigDecimal 类。

    BigDecimal i = new BigDecimal(0.025);
    int n = 2;
    BigDecimal h1 = new BigDecimal(2000);
    BigDecimal h2 = new BigDecimal(4000);

    BigDecimal y1 = ((BigDecimal.ONE.add(i)).pow(n)).multiply(h1);
    BigDecimal y2 = ((BigDecimal.ONE.add(i)).pow(n)).multiply(h2);
    BigDecimal result =  y1.add(y2);

    System.out.println(result.toEngineeringString());

关于Java 舍入( double ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33105210/

相关文章:

java - 在 Java 上制作数据结构的最惯用方法

c++ - 使用 float 时,在 0 和 1 之间归一化是否好?

java - Java 中的双重算术和相等性

sql-server - SQL Server 中的日期时间四舍五入为最接近的 15 分钟

java - Java 中的运费计算器,得出错误的数字

MySQL round(x,1) 返回 0.0 和 -0.0

java - 如何将内容为XML格式的String转成JDom文档

java - 在Centos 7上安装Sqoop 1.99.7

java - StringIndexOutOfBound 异常

c++ - 将十进制 (SQL) 转换为 double C++