Double 转 String 再转 BigDecimal 再转 String
问题记录时间:2023.10.20
整理博客时间:2023.10.25
解决方案
Java 判断 Double 的小数位数:
Double 转 String 再转 BigDecimal 再转 String 再计算 str.length() - str.indexOf(".") - 1
坑
1. 不能直接将 Double 类型转换成 BigDecimal 类型,否则会因为精度问题造成数值偏差。
2. 不可以直接 Double 转 String 然后判断这个 String,因为小数有可能被转化为科学计数法表示:
参考文章:
java 不用科学计数法 java double 不用科学计数法
https://blog.51cto.com/u_16099333/6408015
核心内容摘录如下:
Double类型的变量在区间(负一千万,正一千万)中是正常显示的, 无小数部分时默认带一位小数,如:
9999999—>9999999.0
10000000—>1.0E7
10000000.1—>1.00000001E7
想让Double变量无论是什么数值都不使用科学计数法表示,那么只能将此值转换为字符串形式,当然也不是直接用String.valueOf(Double target)来转换,而是采用以下的方法:
先将Double类型转换成String类型
再将String类型转换成BigDecimal类型
再将BigDecimal类型转换成String
注意!!!
不能直接将Double类型转换成BigDecimal类型,否则会因为精度问题造成数值偏差。
一定要按照Double—>String—>BigDecimal—>String路线走。
下面是示例代码:
//创建Double变量target并完成初始化
Double target = new Double(10000000.1);
//将Double变量target转换成字符串temporary
String temporary = String.valueOf(target);
//将字符串temporary转换成BigDecimal变量bigDecimal
BigDecimal bigDecimal = new BigDecimal(temporary);
//将BigDecimal变量bigDecimal转换成字符串result
String result = String.valueOf(bigDecimal);
本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work
尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。