2018-07-13关于BigDecimal.ROUND_DOWN丢失精度的坑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2018-07-13关于BigDecimal.ROUND_DOWN丢失精度的坑相关的知识,希望对你有一定的参考价值。

参考技术A 最近在做项目时,有一个保留两位小数的需求,该需求要求不四舍五入,即将两位小数后的数直接舍弃,网上查了BigDecimal的用法,发现ROUND_ROUND_DOWN这种舍弃方式符合需求,故使用该方式.

double money = 0.030;

money  = new BigDecimal(money).setScale(2,BigDecimal.ROUND_DOWN).doubleValue();

用以上方式进行保留两位小数的操作,发现money变成了0.29(预期结果是0.03)

网上找了许多资料,找到如下解决方法:

1 BigDecimal(double val)

Translates a double into a BigDecimal.

-----------------------------------------------------

2 BigDecimal(String val)

Translates the String repre sentation of a BigDecimal into a BigDecimal.

这是BigDecimal的两个构造方法,我使用的是第一个构造方法,导致丢失精度。

使用第二个构造函数即可让ROUND_DOWN正常工作

money = new BigDecimal(""+money).setScale(2,BigDecimal.ROUND_DOWN).doubleValue();

来源: https://www.jianshu.com/p/c7924842ed7c

以上是关于2018-07-13关于BigDecimal.ROUND_DOWN丢失精度的坑的主要内容,如果未能解决你的问题,请参考以下文章

2018-07-13期 Zookeeper客户端基本操作本人亲自反复验证通过分享

BTC挖矿成本¥36599.29,市价¥41,598.25——五大币种挖矿成本分析 2018-07-13

easyui常用方法

mysql基本操作-数据表操作

MuMu 模拟器 上保证能不闪退的知乎最新版本 -- 已经测试成功

MySQL数据库的安装教程及相关问题