1. > 生活百科 >

bigdecimal科学计数法问题(bigdecimal 科学计数转普通计数)

本文目录一览:

java BigDecimal如何转换为科学计数法?

BigDecimal a = new  BigDecimal("1111111111111111111111111.1111", new MathContext(5, RoundingMode.HALF_UP));//构造BigDecimal时指定有效精度

System.out.println(a.toEngineeringString());//然后使用toEngineeringString

BigDecimal去除末尾多余的0

BigDecimal是处理高精度的浮点数运算的常用的一个类

当需要将BigDecimal中保存的浮点数值打印出来,特别是在页面上显示的时候,就有可能遇到预想之外的科学技术法表示的问题。

一般直接使用 BigDecimal.toString()方法即可以完成浮点数的打印。

如:

System.out.println( new BigDecimal("10000000000").toString());

但是,toString()方法输出的字符串并不能保证不是科学计数法。

不过在日常的使用中,用toString()方法输出的就是普通的数字字符串而非科学计数法。

直接这么写:

System.out.println( new BigDecimal("100.000").toString());

程序的输出即为: 100.000

如果我们希望去除末尾多余的0,那么我们应该这么写:

System.out.println( new BigDecimal("100.000").stripTrailingZeros().toString());

其中,stripTrailingZeros()函数就是用于去除末尾多余的0的,但是此时程序的输出为: 1E+2

是科学计数法,可能并不是我们想要的。

解决的方法很简单,如果想要避免输出科学计数法的字符串,我们要用toPlainString()函数代替toString()。如:

System.out.println( new BigDecimal("100.000").stripTrailingZeros().toPlainString());

此时程序的输出就为 100

使用@JsonSerialize输出

1.创建一个BigDecimal格式化工具

2.在返回的实体类对应的属性上加上注解:

关于BigDecimal四舍五入的问题

创建BigDecimal对象主要有两种。

BigDecimal b1 = new BigDecimal("1.34");//1.34

BigDecimal b2 = BigDecimal.valueOf(1.34);//1.34

其中b1也可以写成new BigDecimal(Double.toString(1.34)),可以直接new BigDecimal(1.34)吗,也是可以的,只是会出现精度问题。

BigDecimal one1 = new BigDecimal(1.34);//1.3400000000000000799360577730112709105014801025390625

BigDecimal two1 = new BigDecimal("1.34");//1.34

所以四舍五入的时候一定不要直接用double去四舍五入,不然有可能会因为精度的问题出现误差

比如:

因为new BigDecimal((double)0.85) 的结果是0.84999999999999997779553950749686919152736663818359375 而不是0.85

所以要用String去四舍五入

也可以用String.format()方法来四舍五入

小数之间的运算,因为也牵扯到精度问题,所以最好都转成BigDecimal之后去计算

比如加法:

详情文章参考:

java代码怎么把科学计数法转换为具体数字

首先,需要将科学计数法转换成一下:

例如:

BigDecimal bd = new BigDecimal("3.40256010353E11");

然后转换成字符串:

String str = bd.toPlainString();

如果这个数字的长度是在int的范围内的话,是可以转换成int类型:

int a = Integer.parsInt(str);

如果这个数字的长度不是在Int范围内的话,得到的就不是你想要的数字了!

如何使java中double类型不以科学计数法表示

在java中,把一个double或者BigDecimal的小数转换为字符串时,经常会用科学计数法表示,而我们一般不想使用科学计数法,可以通过:

DecimalFormat a = new DecimalFormat("#,##0.00000000");

System.out.println(a.format(11111111.0000001000000001));

的方式来格式化输出字符串。

对于BigDecimal的小数,如果制定精度=6, 则可以放心的使用其toString函数。但是对于6的精度,有可能会使用科学计数法,查看器代码有如下判断:

long adjusted = -(long)scale + (coeff.length-1);

if ((scale = 0) (adjusted = -6)){

非科学计数法的toString.

}

其中scale指BigDecimal的精度,

coeff对应使用BigInteger存储的值的toString字符串, coeff = intVal.abs().toString().toCharArray(),也就是说BigDecimal在对应精度下的整数值,例如BigDecimal ob = new BigDecimal(0.00000011), ob的精度为7, 则coeff="1";如果ob=new BigDecimal(0.10000011), 则coeff="1000001";如果ob=new BigDecimal(0.00000001), 则coeff="0";

BigDecimal强制用科学计数法表示

MathContext m = new MathContext(3) ;

BigDecimal bd = new BigDecimal("1234E+6",m) ;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, website.service08@gmail.com 举报,一经查实,本站将立刻删除。

联系我们

工作日:9:30-18:30,节假日休息