在 c# 中有一件小事让我困惑:)
这是我的变量和结果:
decimal a1 = 0.2M;
decimal a2 = 1.0M;
a1 - a2 = -0.8
float b1 = 0.2F;
float b2 = 1.0F;
b1 - b2 = -0.8
double c1 = 0.2;
double c2 = 1.0;
c1 - c2 = -0.8
double x1 = 0.2F;
double x2 = 1.0F;
x1 - x2 = -0.799999997019768
十进制 - 结果符合我的预期,知道它们以 10 为基数工作。
Float - 让我感到惊讶,知道它在以 2 为底的符号上工作,它实际上显示的结果就好像它作为以 10 为底的符号一样工作而没有失去精度。
Double c - 与 Float 相同。
Double x - 显示我希望 Float 发生的结果。
问题是Float、Double 'c'和'x'组是怎么回事?为什么Double 'x'组失去了精度,而Float组实际上以 10 为基数进行计算,可以说是“预期”的计算结果?想知道为什么将Double x组的数字类型声明为 F 如此彻底地改变了它的结果?
对于它的价值,我只希望十进制组给我'-0.8'的结果,而其他所有的东西都给'-0.799999997019768'。
看起来我错过了一些在计算处理方式中发生的理解链接。