gpt4 book ai didi

c# - 为什么 Decimal.MaxValue - 0.5 的结果是一个整数?

转载 作者:太空狗 更新时间:2023-10-29 22:20:46 24 4
gpt4 key购买 nike

我今天在玩小数。我注意到了这一点:

Decimal.MaxValue 
79228162514264337593543950335

Decimal.MaxValue - 0.5m
79228162514264337593543950334

以下代码打印 true。

static void Main(string[] args)
{
decimal d = Decimal.MaxValue - 0.5M;
var b = d % 1 == 0;
Console.WriteLine(b);

}

我确信这背后有一个原因,但我不知道它是什么。

最佳答案

十进制类型使用 96 位来存储数字序列 ( ref ),加上一个符号(1 位)和一个指定小数位位置的比例因子。

对于这个十进制数:

79228162514264337593543950335

所有 96 位都用于小数点左侧 - 没有任何内容可以表示答案的小数部分。因此,它会变圆。

如果将数字除以 10:

7922816251426433759354395033.5

然后您可以使用一些位来表示小数部分 - 但只能到 1/10,不能更细。

decimaldouble/float 之间的主要区别是它基于decimal 比例因子指定小数点的位置;其他 float 类型基于指定二进制点位置的二进制比例因子。

关于c# - 为什么 Decimal.MaxValue - 0.5 的结果是一个整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3501006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com