备案 控制台
开发者社区 云计算 文章 正文

JavaWeb - Util 之 BigDecimalUtil(解决浮点型商业运算中丢失精度的问题)

简介: JavaWeb - Util 之 BigDecimalUtil(解决浮点型商业运算中丢失精度的问题)

image.png

测试代码

package com.mmall.test;
import org.junit.Test;
import java.math.BigDecimal;
public class BigDecimalTest {
    @Test
    public void test1(){
        System.out.println(0.05+0.01);
        System.out.println(1.0-0.42);
        System.out.println(4.015*100);
        System.out.println(123.3/100);
    }
/*
0.060000000000000005
0.5800000000000001
401.49999999999994
1.2329999999999999
*/
    @Test
    public void test2(){
        BigDecimal b1 = new BigDecimal(0.05);
        BigDecimal b2 = new BigDecimal(0.01);
        System.out.println(b1.add(b2));
    }
/*
0.06000000000000000298372437868010820238851010799407958984375
*/
    @Test
    public void test3(){
        BigDecimal b1 = new BigDecimal("0.05");
        BigDecimal b2 = new BigDecimal("0.01");
        System.out.println(b1.add(b2));
    }
/*
0.6
*/
}

Ps:综上所述,得出结论,必须把计算的 浮点数转成String类型进行构造BigDecimal函数才能精确计算。

 

工具类

package com.mmall.util;
import java.math.BigDecimal;
public class BigDecimalUtil {
    private BigDecimalUtil(){
    }
    public static BigDecimal add(double v1,double v2){
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.add(b2);
    }
    public static BigDecimal sub(double v1,double v2){
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.subtract(b2);
    }
    public static BigDecimal mul(double v1,double v2){
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.multiply(b2);
    }
    public static BigDecimal div(double v1,double v2){
        BigDecimal b1 = new BigDecimal(Double.toString(v1));
        BigDecimal b2 = new BigDecimal(Double.toString(v2));
        return b1.divide(b2,2,BigDecimal.ROUND_HALF_UP);//四舍五入,保留2位小数
        //除不尽的情况
    }
}
Lux_Sun
目录
相关文章
穆雄雄.
|
1月前
|
Web App开发 SQL Java
javaweb实现分页(二)
javaweb实现分页(二)
穆雄雄.
24 1
穆雄雄.
|
1月前
|
SQL 关系型数据库 MySQL
javaweb中实现分页,持续更新……
javaweb中实现分页,持续更新……
穆雄雄.
37 1
穆雄雄.
|
1月前
|
SQL 关系型数据库 MySQL
javaweb实现分页查询(一)
javaweb实现分页查询(一)
穆雄雄.
26 0
游客i66wb7w7cg4tk
|
1月前
|
JSON Java 应用服务中间件
JavaWeb项目之乱码问题及如何解决
JavaWeb项目之乱码问题及如何解决
游客i66wb7w7cg4tk
21 4
不会就选C.
|
1月前
|
Java Spring 容器
[JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
[JavaWeb]——过滤器filter与拦截器Interceptor的使用、执行过程、区别
不会就选C.
54 0
whisper1
|
1月前
JavaWeb 开发之 ServletContext 的和使用
JavaWeb 开发之 ServletContext 的和使用
whisper1
30 1
编程千纸鹤
|
6天前
|
存储 前端开发 JavaScript
基于JavaWeb实现停车场管理系统
基于JavaWeb实现停车场管理系统
编程千纸鹤
10 1
编程千纸鹤
|
6天前
|
前端开发 JavaScript Java
图书借阅管理平台|基于JavaWeb实现图书借阅系统
图书借阅管理平台|基于JavaWeb实现图书借阅系统
编程千纸鹤
33 1
智商低情商凑
|
7天前
|
SQL Java 数据库连接
JavaWeb Mapper代理开发
JavaWeb Mapper代理开发
智商低情商凑
16 1
陈佳烨
|
1天前
|
前端开发 Java 关系型数据库
JavaWeb开发简介
JavaWeb开发简介
陈佳烨
10 0

热门文章

最新文章

  • 1
    后浪拍前浪-覆写父类方法 | 带你学《Java面向对象编程》之三十九
  • 2
    JAVA设计模式之建造者模式
  • 3
    Java 基础 之 while 循环
  • 4
    java进阶-常用数据结构以及算法思想
  • 5
    深入Java字符串
  • 6
    Java、C#双语版配套AES加解密示例
  • 7
    关于java中split的使用
  • 8
    java对象与json对象间的相互转换
  • 9
    深入 JAVA里面关于byte数组和String之间的转换问题
  • 10
    Java面向对象基础--String类中常用的方法
  • 1
    Java并发编程:理解并应用ReentrantLock
    25
  • 2
    Java并发编程:深入理解线程池
    13
  • 3
    Java 8新特性解析及应用区块链技术在供应链管理中的应用与挑战
    26
  • 4
    Java 效率编码 必备插件 Lombok 让代码更优雅
    13
  • 5
    Java代码一键生成数据库文档(案例详解)
    42
  • 6
    java一行代码实现RESTFul接口
    28
  • 7
    Java远程连接本地开源分布式搜索引擎ElasticSearch
    21
  • 8
    Spring Boot单元测试报错java.lang.IllegalStateException: Could not load TestContextBootstrapper [null]
    30
  • 9
    Java并发编程:深入理解线程池
    23
  • 10
    Java中 a+=b和a=a+b有什么区别?
    15
  • 相关课程

    更多
  • Java面试疑难点解析 - 面试技巧及语言基础
  • Java面试疑难点解析 - Java Web开发
  • Java面试疑难点解析 - 系统架构及项目设计
  • Java编程入门
  • Java面向对象编程
  • Java高级编程
  • 相关电子书

    更多
  • Spring Cloud Alibaba - 重新定义 Java Cloud-Native
  • The Reactive Cloud Native Arch
  • JAVA开发手册1.5.0
  • 相关实验场景

    更多
  • 阿里云平台上进行Java程序的编译与运行
  • 使用Java面向对象编写网络通信程序应用
  • Elasticsearch Java API Client 开发
  • 手动部署Java Web环境(Alibaba Cloud Linux 2)
  • 搭建Java Web开发环境(Anolis OS)
  • RocketMQ中使用Java客户端发送消息和消费的应用
  • 下一篇
    基于函数计算模板部署AI应用实践

    深圳SEO优化公司广州百度标王布吉品牌网站设计坪地外贸网站制作同乐关键词按天收费大运百搜词包罗湖网站推广方案吉祥网站改版丹竹头百搜标王塘坑seo网站优化大运网站优化软件横岗SEO按效果付费宝安网站优化按天收费永湖营销型网站建设大浪网络广告推广大浪百搜标王荷坳网络推广南澳百度关键词包年推广大浪网站优化推广大芬seo网站优化光明网站优化同乐网络营销沙井关键词排名西乡阿里店铺运营大运网页制作东莞网络广告推广丹竹头关键词排名包年推广坪山网络广告推广西乡关键词排名福永关键词排名包年推广木棉湾关键词排名歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

    深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化