从其它平台迁移而来


人到中年,总是不免生出些危机感,长年使用Delphi,心中自是不踏实,闲来便看两眼java,不想却发现个从未注意过的小问题。

  • 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
  • Delphi
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
  • Go
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
  • C#
 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
  • python 3
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

从以上可看出:

  1. Delphipython 3,整数/整数=浮点数;javaGoC#,整数/整数=整数。

  2. DelphiGoC#(.Net Framework)javaC#(.NET Core)python 3的浮点数精度要高。

  3. Delphi按自然认知书写即可;GoC#(.Net Framework)需要注意一下书写语法;python 3浮点数做比较时要做下特殊处理才行;javaC#(.NET Core)不仅要注意书写语法,比较时还要做特殊处理。

综合精度和方便度来看,Delphi才是王者,GoC#(.Net Framework)次之,python 3再次,javaC#(.NET Core)末之。

哈哈,Delphi依然宝刀未老啊!