c#大双打比较

问题描述 投票:1回答:1

让我开始说这不是关于小数精度公差比较的问题!这更像是大型双打的固有表现的问题,因为在一定范围之后,计算机开始失去重要的预设,而不是在小数方面。例如。

double d1 = 1e20+8000;
double d2 = 1e20;
Debug.WriteLine(d1 == d2); 

现在这产生了真实,这对我来说是非常不可接受的。在项目中此时转换为十进制是不可能的。有没有办法减轻这种情况,例如以某种方式计算,在^ 20,计算机代表数字^ 20 + - 8000相同?对于这个指数,容差似乎是8000,它会触发正确的比较,但我需要精确比较到小数点,除此之外我不关心大数。

c# comparison largenumber
1个回答
7
投票

现在这产生了真实,这对我来说是非常不可接受的。

然后,您应该使用满足您需要的数据类型。当您期望准确性时,不应使用浮点精度数字。 decimal是你应该使用的。

更改数据类型是您长期工作的唯一选择。如果您不想去那里,那么就没有选项可以在检查所做的计算时不需要大量的工作。

© www.soinside.com 2019 - 2024. All rights reserved.