问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2023-01-09 13:16

我来回答

1个回答

热心网友 时间:2023-10-23 11:43

最近在做项目时,有一个保留两位小数的需求,该需求要求不四舍五入,即将两位小数后的数直接舍弃,网上查了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
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
AFK半年后回归WOW,但发现好多东西搞不清楚了,求指教,多问题高分_百度知 ... wow85级什么本可以打378的猎人饰品 落花流水(打一动物)谜底及原因 办理买房按揭贷款需要多长时间啊 一手房如何办按揭 一手房按揭贷款申请条件 怎么把微信好友转移到另一个微信号上? 高铁站没有身份证可以进站吗 京东Plus会员每月优惠券去哪领?Plus会员哪里买最便宜? 京东plus会员优惠券在哪里领?怎么用? BigDecimal.ROUND_XXX的各种用法(转) 百菇高汤精调味料好吗 开心一天的作文? 快乐天在哪看 在哪里可以看快乐天漫画 三国杀崩坏和威重技能是什么 税务师考试的准考证如何打印税务师考试的准考证怎么打印? 周黑鸭鱼豆腐算素菜拼盘吗 在家做手工鱼豆腐该怎么做? OKR案例:自上而下的分解OKR 能帮忙弄个,朱文浩的个性签名吗? 削萝卜的机器削的太薄怎么办 奥特曼格斗进化3手机版如何下载 飞度装饰条怎么装 2021款别克君越车门装饰条怎么更换 领克01门把手有个装饰条这么按装 淘宝上邦宝积木是真的么 Css html 各位大神 平板app的横竖屏切换的时候,是不是界面的结构必须一样啊?怎么做到可 洗衣机忘记放排水管了会怎样? 求惠普(HP)DV1000 1702笔记本所有驱动 中天固邦775的胶怎么样 落地玻璃窗的玻璃胶安全性能多久 融合云信短信发送日志的保留时长为多长 即时通讯软件是哪个开发的软件? boss直聘不添加才料能注销吗 小米5储存空间不足怎么清理 女人梦见打老鼠没打死是什么征兆 不是所有的人陪你到黄昏不是所有的爱难舍难分是什么歌 上古卷轴5天际特别版有简体中文吗 上古卷轴5欧版有中文吗 怎么样重新登录百度知道?我下载了但是想换个帐号。 上古卷轴5周年纪念版怎么换成特别版 奔驰c200l百公里加速几秒? 美国人是什么人的后代? 我想在多玩YY开个K歌公会帮忙选个名字:梦想之声 音悦会所 聆潮娱乐 紫魅倾城 蝶舞魅惑 紫魅忘忧 忘忧娱乐 退伍提升学历政策 如何查询移动3G上网卡剩余流量和余额? 南华大学不加部门怎么加学分 南华大学缓考有平时分吗 南华大学除了核和医其他专业肿么样?学分呢?