从其它平台迁移而来
人到中年,总是不免生出些危机感,长年使用Delphi,心中自是不踏实,闲来便看两眼java,不想却发现个从未注意过的小问题。
1
2
3
4
5
|
double a = 1 / 10; //0.0
double b = 1.0 / 10; //0.1
double c = 1 / 10.0; //0.1
double d = 1 - 9.0 / 10; //0.09999999999999998
double e = 1 - 9 / 10; //1.0
|
1
2
3
4
5
|
a := 1 / 10; //0.1
b := 1.0 / 10; //0.1
c := 1 / 10.0; //0.1
d := 1 - 9.0 / 10; //0.1
e := 1 - 9 / 10; //0.1
|
1
2
3
4
5
|
a := 1 / 10 //0
b := 1.0 / 10 //0.1
c := 1 / 10.0 //0.1
d := 1 - 9.0/10 //0.1
e := 1 - 9/10 //1
|
1
2
3
4
5
6
7
8
9
10
11
12
|
//.Net Framework
double a = 1 / 10; //0
double b = 1.0 / 10; //0.1
double c = 1 / 10.0; //0.1
double d = 1 - 9.0 / 10; //0.1
double e = 1 - 9 / 10; //1
//.NET Core
double a = 1 / 10; //0
double b = 1.0 / 10; //0.1
double c = 1 / 10.0; //0.1
double d = 1 - 9.0 / 10; //0.09999999999999998
double e = 1 - 9 / 10; //1
|
1
2
3
4
5
|
a = 1 / 10; //0.1
b = 1.0 / 10; //0.1
c = 1 / 10.0; //0.1
d = 1 - 9.0 / 10; //0.09999999999999998
e = 1 - 9 / 10; //0.09999999999999998
|
从以上可看出:
-
Delphi和python 3,整数/整数=浮点数;java、Go、C#,整数/整数=整数。
-
Delphi、Go、C#(.Net Framework)比java、C#(.NET Core)、python 3的浮点数精度要高。
-
Delphi按自然认知书写即可;Go、C#(.Net Framework)需要注意一下书写语法;python 3浮点数做比较时要做下特殊处理才行;java、C#(.NET Core)不仅要注意书写语法,比较时还要做特殊处理。
综合精度和方便度来看,Delphi才是王者,Go、C#(.Net Framework)次之,python 3再次,java、C#(.NET Core)末之。
哈哈,Delphi依然宝刀未老啊!