`
flyfoxs
  • 浏览: 298167 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Scala浮点运算精度问题

 
阅读更多

在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"))
  }
}

 

0
1
分享到:
评论
1 楼 regale 2016-10-16  
java用的double,scala用的String,要精确,请用String.

相关推荐

Global site tag (gtag.js) - Google Analytics