Java中float类型自动转double类型会有误差
Java中float类型自动转double类型为什么数值会有误差4.2f float类型·转double类型怎么是4.19呢
Java高手知道是怎么回事不
Java中float类型自动转double类型为什么数值会有误差4.2f float类型·转double类型怎么是4.19呢
Java高手知道是怎么回事不
答案:额。。你楼上和楼主我有份愚见
首先:Java无法精确计算小数后面的
比如
double a = 1.3;
double b = 1.5;
System.out.println( a == b);
你会发现结果是true
因为java计算的时候已经把小数部分截止掉了
或者说不止Java 应该其他语言也是这样。。 至少我没学过一门语言是能精确判断的
关于如何处理小数部分我这边有写过一份代码你参考下
java中小数的处理
public class Arith {
private static final int DEF_DIV_SCALE = 10;
private Arith() {
}
/**
* 提供精確的加法運算
* @param args
*/
public static double add(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.add(b2).doubleValue();
}
/**
* 提供了精確的減法運算
*
* @param args
*/
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
/**
* 提供了精確的乘法運算
* @param args
*/
public static double mul(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.multiply(b2).doubleValue();
}
/**
* 提供了(相對)精確的除法運算,當發生除不儘的情況時,精確到
* 小數點以後110位
* @param args
*/
public static double div(double v1, double v2) {
return div(v1, v2, DEF_DIV_SCALE);
}
/**
* 提供了(相對)精確的除法運算,當發生除不儘的情況時,由scale參數指定
* 精度,以後的數字四捨五入
* @param args
*/
public static double div(double v1, double v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(
"The scale must be a positive integer or zero");
}
&nb