OtakuMonkey 2022-02-21 11:32 采纳率: 0%
浏览 178

ScriptEngine表达式引擎精度丢失问题

在使用ScriptEngine过程中,发现存在结果精度丢失的问题,如下图:

img

可以看到,参与求和的各个数值都是小数点后两位,怎么能保持这个精度呢?另外,我试了Jexl和Aviator这两个引擎,都存在这种问题。

  • 写回答

2条回答 默认 最新

  • CSDN专家-showbo 2022-02-21 12:19
    关注

    浮点数计算有精度问题,用Math.round四舍五入下
    float和double类型主要是为了科学计算和工程计算而设计的。他们执行二进制浮点运算,这是为了在广泛的数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们并没有提供完全精确的结果,所以不应该被用于需要精确结果的场合。float和double类型尤其不是和用于货币计算,因为要让一个float或者double精确地标识0.1(或者10的任何其他负数次方值)是不能的。

    1、对于任何需要精确答案的计算任务,请不要使用float或者double。

    2、如果你想让系统来记录十进制小数点,并且不介意因为不使用基本类型而带来的不便,就请使用BigDecimal。使用BigDecimal还有一些额外的好处,他允许你完全控制舍入,每当一个操作涉及舍入的时候,他允许你从8种舍入模式中选择其一。如果你正通过法定要求的舍入行为进行业务计算,使用BigDecimal是非常方便的。

    3、如果性能非常关键,并且你不介意自己记录十进制小数点,而且所涉及的数值又不太大,就可以使用int或者long。如果数值范围内没有超过9位十进制数字,就可以使用int;如果不超过18位数字,就可以使用long。如果数值可能超过18位数字,就必须使用BigDecimal。


    img

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 2月21日

悬赏问题

  • ¥15 有谁能够把华为matebook e 高通骁龙850刷成安卓系统,或者安装安卓系统
  • ¥188 需要修改一个工具,懂得汇编的人来。
  • ¥15 livecharts wpf piechart 属性
  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证
  • ¥15 msix packaging tool打包问题
  • ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
  • ¥15 python的qt5界面