博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
double类型转BigDecimal类型精度丢失
阅读量:6041 次
发布时间:2019-06-20

本文共 1414 字,大约阅读时间需要 4 分钟。

hot3.png

在项目中,一般遇到关于金钱方面的,我们会使用BigDecimal类型存储金额,但是通常情况下金额都是double类型,需要转换为BigDecimal类型。但是使用不当,会造成金额错误。

##问题重现

public class TestBigDecimal {	public static void main(String[] args) {            double d = 201111.05;           System.out.println(d);//201111.05           BigDecimal decimal = new BigDecimal(d);           System.out.println(decimal);//201111.0499999999883584678173065185546875           System.out.println(decimal.setScale(1, RoundingMode.HALF_UP));//201111.0	}}
201111.05201111.0499999999883584678173065185546875201111.0

从上面代码运行结果可以看出,double类型的变量转换成BigDecimal类型的时候数值发生了改变, 精度丢失了,因此不能使用此构造方法进行转换。 ##解决方法

import java.math.BigDecimal;public class TestBigDecimal {	public static void main(String[] args) {            double d = 201111.05;            System.out.println(new BigDecimal(Double.toString(d)));//201111.05            System.out.println(BigDecimal.valueOf(d));//201111.05	}}
201111.05201111.05
BigDecimal使用参数为String类型的构造器或者使用BigDecimal.valueOf()方法替代。BigDecimal.valueOf()方法内部也是使用new BigDecimal(String value)类型构造器进行实例化。
public static BigDecimal valueOf(double val) {        // Reminder: a zero double returns '0.0', so we cannot fastpath        // to use the constant ZERO.  This might be important enough to        // justify a factory approach, a cache, or a few private        // constants, later.        return new BigDecimal(Double.toString(val));    }

转载于:https://my.oschina.net/u/1028135/blog/898540

你可能感兴趣的文章
阿里视频云总经理朱照远:视界大有不同
查看>>
原生js调用json方法
查看>>
《SOA Web Service合约设计与版本化》—第1章1.5节必备知识阅读
查看>>
Intel研究院院长吴甘沙演讲全文:大数据分析师的卓越之道(32PPT)
查看>>
《圣殿祭司的ASP.NET4.0专家技术手册》----1-8 .NET 4.0内建的图表控件
查看>>
DevOps:软件架构师行动指南1.3 DevOps视角
查看>>
《嵌入式 Linux C 语言应用程序设计(修订版)》——2.4 嵌入式Linux调试器GDB的使用...
查看>>
高并发写入存储线性相关性优化
查看>>
《Python Cookbook(第3版)中文版》——1.3 保存最后N个元素
查看>>
计算机网络面试题集锦(含答案)—“银四”你还不准备好吗
查看>>
Vbox安装增强功能出错
查看>>
Mac SourceTree提交、更新代码到GitHub
查看>>
vue-cli 项目下生成二维码
查看>>
搭建私有仓库-组件开发-笔记
查看>>
go语言教程哪里有?Go从入门到精通系列视频4.1 对称加密算法
查看>>
webpack打包CSS
查看>>
window 安装git
查看>>
we need you
查看>>
解析ws订阅返回的GZIP 压缩数据
查看>>
Docker实战 (二) - Docker环境的搭建方法
查看>>