通过减法赋值的双精度值得到了奇怪的值

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

// 为什么这段代码会给出这个值? // 该值不应该是 0.9D 吗?

双重测试= 360.9D;

测试-= 360D;

// 测试 = 0.8999999999997726

c# double
1个回答
1
投票

这是由于当您想以二进制形式存储小数时会发生固有的浮点不精确性。 维基百科提供了很好的解释

基本上你不能用二进制精确地存储所有的小数。小数部分由 2^n 的倒数之和组成,其中 n 是正整数。

所以为了接近 0.9,它将是 1/2 + 1/4 + 1/8 + 1/16 + 1/32 ... 直到总和接近 0.9,但你可以看到该系列永远不会完全等于 0.9.

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