JAVA 中出现double 及float计算丢失精度的问题,大家是怎么避免的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 中出现double 及float计算丢失精度的问题,大家是怎么避免的相关的知识,希望对你有一定的参考价值。

static void doubleErr()
double a1 = 9.959955;
double a2 = 1.01;
System.out.println("double类型产生了错误请看: " + (a1 - a2));

static void floatErr()
float f1 = 1.3284544f;
float f2 = 1.32f;
System.out.println("F1-F2 float浮点型产生了错误: " + (f1 - f2));

static void doubleErr()
double a1 = 9.959955;
double a2 = 1.01;
double a3 = a1 - a2;
DecimalFormat df = new DecimalFormat("#.000000");
System.out.println("double: " + df.format(a3));

static void floatErr()
float f1 = 1.3284544f;
float f2 = 1.32f;

BigDecimal n = new BigDecimal((f1 - f2));

BigDecimal n2 = n.setScale(7, BigDecimal.ROUND_FLOOR);

System.out.println("F1-F2 : " + n2);


这样就能格式化double,和控制float精度了。你试试。追问

谢谢,float仍然是错的?不知有何高招

参考技术A 用long类型来避免吧追问

long它不允许小数怎么办,讲讲你的解决办法

参考技术B 很多语言都是这样。浮点数在计算机中是有误差的。所以必须使用专门的方式计算。
在Java中,需要使用BigDecmal,而且需要在构造参数使用String类型。
参考技术C 可以String来处理 参考技术D 用long型的做

以上是关于JAVA 中出现double 及float计算丢失精度的问题,大家是怎么避免的的主要内容,如果未能解决你的问题,请参考以下文章

java float double精度为啥会丢失

Java double和 float丢失精度问题

Java中浮点型数据Float和Double进行精确计算的问题

double和float进行小数计算精度不够

转JAVA程序中Float和Double精度丢失问题

BigDecimal精度丢失问题