c0n*_*rol 10 c# floating-point numbers floating-accuracy subtraction
我是C#的初学者,我正在使用浮点数.我需要在这两个数字之间进行减法,但它不起作用.我知道这是由浮点数引起的,但我该如何解决呢?如果你这么好,你可以解释一下为什么会发生这种情况吗?提前致谢.
Hec*_*rea 10
考虑使用decimal而不是float:
// Instead of this...
float a = 12.345F;
float b = 12;
float c = a - b;
// Use this:
decimal d = 12.345M;
decimal e = 12;
decimal f = d - e;
Run Code Online (Sandbox Code Playgroud)
Jon Skeet在这个答案中给出了两种类型之间差异的一个很好的解释:https://stackoverflow.com/a/618596/446681
这不是ac#问题,这是一个计算机科学问题.如果你想真正了解正在发生的事情,请阅读每个计算机科学家应该知道的关于浮点运算的内容.如果你只关心你遇到问题的原因,那就是因为Float和Double在这个平台上只分别精确到7位和15位,你需要应用舍入逻辑来达到你想要的结果.
将无限多个实数压缩成有限数量的比特需要近似表示.尽管存在无限多个整数,但在大多数程序中,整数计算的结果可以以32位存储.相反,给定任何固定数量的位,大多数具有实数的计算将产生无法使用那么多位精确表示的量.因此,浮点计算的结果通常必须舍入,以便适应其有限表示.该舍入误差是浮点计算的特征.Goldberg 1991
你究竟在计算什么?
float a = 12.35F;
float b = 12.0F;
float ans = a - b; //0.350000381
double x = 12.35;
double y = 12.0;
double ans2 = x - y; //0.34999999999999964
decimal n = 12.35m;
decimal m = 12.0m;
decimal ans3 = n - m; //0.35
Run Code Online (Sandbox Code Playgroud)
对我来说,这些计算给出了正确的结果.
归档时间: |
|
查看次数: |
13816 次 |
最近记录: |