gpt4 book ai didi

c# - 十进制如何工作?

转载 作者:太空狗 更新时间:2023-10-30 00:27:49 29 4
gpt4 key购买 nike

我查看了 C# 中的 decimal,但我不是 100% 确定它做了什么。有损吗?在 C# 中编写 1.0000000000001f+1.0000000000001f 在使用 float 时产生 2 (double 得到 2.0000000000002 这是正确的)是否有可能将两个带小数的东西相加而得不到正确答案?

我可以使用多少位小数?我看到 MaxValue 是 79228162514264337593543950335 但如果我减去 1 我可以使用多少位小数?

有什么我应该知道的怪癖吗?在 C# 中它是 128 位,在其他语言中它是多少位,它的工作方式是否与 C# 十进制相同? (加、除、乘时)

最佳答案

您显示的不是decimal - 它是float。他们是非常不同的类型。 ffloat 的后缀,又名 System.Single . mdecimal 的后缀,又名 System.Decimal .从您的问题中不清楚您是否认为这实际上是在使用 decimal,或者您是否只是在使用 float 来证明您的恐惧。

如果您使用 1.0000000000001m + 1.0000000000001m,您将获得完全正确的值。请注意,double 版本无法准确表达任何一个单独的值。

我有关于 .NET 中两种 float 的文章,您应该通读它们以及其他资源:

当然,所有浮点类型都有其局限性,但特别是您不应期望二进制浮点能够准确表示十进制值,例如 0.1。它仍然不能表示任何不能用 28/29 十进制数字精确表示的东西 - 所以如果你用 1 除以 3,你当然不会得到准确的答案。

您还应注意,decimal范围double 的范围小得多。因此,虽然它可以具有 28-29 位十进制数字的精度,但您不能表示真正巨大的数字(例如 10200)或极小的数字(例如 10-200)。

关于c# - 十进制如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5046168/

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