浮点型计算、四舍五入问题
点击查看代码
package com.bh.bugs;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class Test1 {
public static void main(String[] args) {
System.out.println("start==========");
// java中, double在计算的时候,精度丢失问题
// 1, 问题再现
// 不仅仅是java语言, 包括js, 在计算浮点类型的时候
// 出现了精度丢失
double d1 = 1;
double d2 = 0.99;
// System.out.println(d1 - d2);
// 2, 问题分析
// 问题很简单, 计算机底层是二进制的,任何计算都会转换成二进制
// 然后进行计算, 计算结果会再次转换成相应的类型
// 这个时候,精度就丢失了
// 3, 问题解决
// 在java中,任何关于浮点类型的计算, 一定要使用BigDecimal这个类
// 如果你的项目是, 银行,商城,保险,金融,电信等,一定要使用BigDecmial
//BigDecimal演示
BigDecimal big1 = new BigDecimal("1");
BigDecimal big2 = new BigDecimal("0.99");
BigDecimal rst = big1.subtract(big2);
double d3 = rst.doubleValue();
// System.out.println(d3);
// 保留两位小数点, 经典的四舍五入
BigDecimal rst2 = rst.setScale(2, RoundingMode.HALF_UP);
// System.out.println(rst2);
BigDecimal big3 = new BigDecimal("11.545");
// 银行家舍入方法
// 银行家舍入
// https://baike.baidu.com/item/%E9%93%B6%E8%A1%8C%E5%AE%B6%E8%88%8D%E5%85%A5/4781630?fr=aladdin
BigDecimal rst3 = big3.setScale(2,RoundingMode.HALF_EVEN);
System.out.println(rst3);
System.out.println("end ==========");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能