在以下示例中,任何人都可以解释 double 和 float 数据类型的行为。为什么精度值会发生变化?
public class TestClass{
public static void main(String[] args) {
String st = "4.45";
double i = Double.parseDouble(st);
float fff = Float.parseFloat(st);
System.out.println("Float 4.45 outputs : *******************************");
System.out.println(fff);
int fpp = (int) (fff *100);
System.out.println(fff *100);
System.out.println(fpp);
System.out.println("Double 4.45 outputs : *******************************");
System.out.println(i);
int p = (int) (i *100);
System.out.println(i *100);
System.out.println(p);
String str = "9.45";
double ii = Double.parseDouble(str);
float ff = Float.parseFloat(str);
System.out.println("Float 9.45 outputs : *******************************");
System.out.println(ff);
int fp = (int) (ff *100);
System.out.println(ff *100);
System.out.println(fp);
System.out.println("Double 9.45 outputs : *******************************");
System.out.println(ii);
int pp = (int) (ii *100);
System.out.println(ii *100);
System.out.println(pp);
String strr = "9.40";
double iir = Double.parseDouble(strr);
float ffr = Float.parseFloat(strr);
System.out.println("Float 9.40 outputs : *******************************");
System.out.println(ffr);
int fpr = (int) (ffr *100);
System.out.println(ffr *100);
System.out.println(fpr);
System.out.println("Double 9.40 outputs : *******************************");
System.out.println(iir);
int ppr = (int) (iir *100);
System.out.println(iir *100);
System.out.println(ppr);
}
}
输出:
Float 4.45输出:*******************************
4.45
444.99997
444
双4.45输出:*******************************
4.45
445.0
445
Float 9.45输出:*******************************
9.45
945.0
945
双9.45输出:*******************************
9.45
944.9999999999999
944
Float 9.40输出:*******************************
9.4
939.99994
939
双9.40输出:*******************************
9.4
940.0
940
答案 0 :(得分:1)
对Float
,Double
及其原始对应物执行操作时,小数点容易丢失精确度(例如,您打印的ii * 100
值)。
这就是为什么您通常使用java.math
包中的类来进行与货币相关的计算(例如BigDecimal
)。