小墨の博客

梦想需要付诸行动,否则只能是梦

Java 判断Double的小数点后数字位数(有坑!不可以直接toString然后判断,可能为科学技术法表示)

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,因为小数有可能被转化为科学计数法表示:

39J[FTN4V`W}Q3HJ@P(S]T6.png



参考文章:

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

尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。

    发表评论:

    搜索
    本文二维码
    标签列表
    站点信息
    • 文章总数:547
    • 页面总数:20
    • 分类总数:96
    • 标签总数:213
    • 评论总数:63
    • 浏览总数:287025

    | | |
    | |  Z-Blog PHP