java 小数精确计算
2024-10-07 10:06:19
小数精确计算 System.out.println(2.00 -1.10);//0.8999999999999999 上面的计算出的结果不是 0.9,而是一连串的小数。问题在于1.1这个数字不能被精确表示为一个double,因此它被表 示为最接近它的double值,该程序从2中减去的就是这个值,但这个计算的结果并不是最接近0.9的double值。 一般地说,问题在于并不是所有的小数都可以用二进制浮点数精确表示。 二进制浮点对于货币计算是非常不适合的,因为它不可能将1.0表示成10的其他任何负次幂。 解决问题的第一种方式是使用货币的最小单位(分)来表示: System.out.println(-);// 第二种方式是使用BigDecimal,但一定要用BigDecimal(String)构造器,而千万不要用 BigDecimal(double)来构造(也不能将float或double型转换成String再来使用BigDecimal(String)来构造,因为在将float或double转换成String时精度已丢失)。
例如new BigDecimal(0.1),
它将返回一个BigDecimal,
也即0.,
正确使用BigDecimal,程序就可以打印出我们所期 望的结果0.: System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("1.10")));// 0.9 另外,如果要比较两个浮点数的大小,要使用BigDecimal的compareTo方法。
最新文章
- [OpenCV] Samples 07: create_mask
- offline .net3.5
- 关于window.onload,window.onbeforeload与window.onunload
- 控制反转(IOC)和依赖注入(DI)的区别
- 发现木马C:\windows\system32\FastUserSwitchingCompatibilityex.dll
- DataSnap数据库连接池,数据集对象池的应用
- 你可以用OpenCV来干什么
- MVC 点击下载文档
- ECSHOP订单一键发货简化订单发货流程
- js中的ajax的运用
- HTML5画布(线条、渐变)
- FastJSON 简单使用
- 【leetcode系列】Valid Parentheses
- GMM的EM算法
- Winform中node.Text重命名时窗口无响应假死的解决方法
- 尝试造了个工具类库,名为 Diana
- oracle表中字段的添加、删除
- 初识Dubbo+Zookeeprt搭建SOA项目
- No such property: FOR_RUNTIME for class: org.gradle.api.attributes.Usage
- 关于pdfbox操作pdf的分享链接手长