java - Groovy 与 Java - 浮点精度的差异

标签 java groovy floating-accuracy

这里浮点精度差异的原因可能是什么?

def "emi test"(){
        given:
        def P =  6000000.00
        def n = 20 * 12
        def r = (8.35/12)/100

        double emi_g = (P * r * (1+r).power(n))  / ((1+r).power(n) - 1)
        double emi_j= (P * r * Math.pow(1+r,n)) / (Math.pow(1+r,n)-1);
        expect:
        emi_g == emi_j
    }

结果:

emi_g == emi_j
|     |  |
|     |  51501.177737160346
|     false
51501.177737160666

最佳答案

结果的数据类型解释了差异。

在 shell 中运行时,结果类型为:

groovy:000> emi_g.getClass()
===> class java.math.BigDecimal
groovy:000> emi_j.getClass()
===> class java.lang.Double

Groovy 的实现返回一个 BigDecimal,它比 Double 具有更好的精度

关于java - Groovy 与 Java - 浮点精度的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49913438/

相关文章:

javascript - 广播问答 Activity

java - 当 session 过期时,Apache Curator 如何尝试重新连接?

java - 如何在Java中使透明图像变得不透明?

javascript - JavaScript 中处理大数(BigNum)的标准方案是什么?

java - 在java中将数字转换为日期

grails - 如何使用RestFul API在Grails中直接调用GSP

collections - 与 Groovy 集合的反连接

java.lang.IllegalArgumentException : Cannot instantiate interface org. springframework.context.ApplicationContextInitializer

MySQL GROUP BY 浮点字段

c++ - 如何从 C++ 中的 vector 中删除几乎重复项