在Spark开发的时候,直接使用java.math.BigDecimal进行浮点相乘的时候,依然有精度缺失.但是如果是纯JAVA就没有,在Scala中调用JAVA的BigDecimal就有这样的问题.
偶然之间发现Scala也实现了scala.math.BigDecimal. 换用SCALA自身的BigDecimal就没这样的问题了.
不知道深层次的原因,在这抛砖引玉,如果有人知道的,请赐教.
下面是实验代码.
package com.cisco.test
import java.math.BigDecimal
object TestSyntax {
def main(args: Array[String]): Unit = {
val local_price=new BigDecimal(0.015)
val exchange_rate = new BigDecimal(2)
//0.02999999999999999888977697537484345957636833190917968750
println(local_price.multiply(exchange_rate))
//0.030
import scala.math.BigDecimal
println(BigDecimal("0.015") * BigDecimal("2"))
println(BigDecimal("0.0") * BigDecimal("0.751879699"))
}
}

本文通过对比Java与Scala中BigDecimal的使用,展示了在Spark环境下处理浮点数乘法时遇到的精度丢失问题,并提供了解决方案。
1737

被折叠的 条评论
为什么被折叠?



