【Java】float,double大数据不要科学计数方法显示

编程入门 行业动态 更新时间:2024-10-06 22:31:45

【Java】float,double大数据不要<a href=https://www.elefans.com/category/jswz/34/1771194.html style=科学计数方法显示"/>

【Java】float,double大数据不要科学计数方法显示

文章目录

  • 1.前言:理论
  • 2.实践
  • 3.场景再现2
  • 4.可能解决

转载:

1.前言:理论

  1. 科学计数法:如2E8, 2乘以10的8次方。
  2. 浮点数(float,double)整数部分达到8位及以上,会以科学计数法显示。
  3. 整数(int,long)不会显示成科学计数法。

2.实践

例子

 long l1 = 1234567l;long l2 = 12345678l;long l3 = 123456789l;double f1 = 1234567f;double f2 = 12345678f;double f3 = 123456789f;double d1 = 1234567.123d;double d2 = 12345678.123d;double d3 = 123456789.123d;System.out.println("******* long *******");System.out.println(l1);System.out.println(l2);System.out.println(l3);System.out.println("******* float *******");System.out.println(f1);System.out.println(f2);System.out.println(f3);System.out.println("******* double *******");System.out.println(d1);System.out.println(d2);System.out.println(d3);

运行结果

******* long *******
1234567
12345678
123456789
******* float *******
1234567.0
1.2345678E7
1.23456792E8
******* double *******
1234567.123
1.2345678123E7
1.23456789123E8

怎么让float,double大数据在前端不以科学计数方法显示?

public static void main(String[] args) {double d = 123456789.128d;String s1 = big(d);String s2 = big2(d);System.out.println(d);System.out.println(s1);System.out.println(s2);}// 方法一:NumberFormatprivate static String big(double d) {NumberFormat nf = NumberFormat.getInstance();// 是否以逗号隔开, 默认true以逗号隔开,如[123,456,789.128]nf.setGroupingUsed(false);// 结果未做任何处理return nf.format(d);}//方法二: BigDecimalprivate static String big2(double d) {BigDecimal d1 = new BigDecimal(Double.toString(d));BigDecimal d2 = new BigDecimal(Integer.toString(1));// 四舍五入,保留2位小数return d1.divide(d2,2,BigDecimal.ROUND_HALF_UP).toString();}

运行效果:

1.23456789128E8
123,456,789.128
123456789.13

3.场景再现2

20201023 日,程序员节日的前一天 ,因为项目,突然发现数据量太大,又显示了科学计数法,关键我们这个字段名字叫

flow类型,然后数据是 102400000
但是却显示成 1.024E8 ,

怎么能让这个保持double类型的同时,不改变成科学技术法呢?

4.可能解决

我们也可以使用字符串表示,不使用数字。

或者如下未验证的案例

js数字的精度是有限的,Java的Long类型的数字超出了JavaScript的处理范围。
内部只有一种数字类型Number,双精度64位格式存储,即使整数也是如此。
最大的数值应该是2的53次方-1,十进制是【9007199254740991】,16位。
所以说超过16位,那么如果属于Number类型去解析的,就会丢失精度。

解决方案:

@JsonSerialize(using=ToStringSerializer.class)


更多推荐

【Java】float,double大数据不要科学计数方法显示

本文发布于:2024-03-05 12:24:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1712288.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:科学   方法   数据   Java   float

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!