C# 十进制数是多少';不可以,但可以加倍,反之亦然?

C# 十进制数是多少';不可以,但可以加倍,反之亦然?,c#,floating-point,double,decimal,C#,Floating Point,Double,Decimal,有人能告诉我们十进制变量不能做什么,但同时double可以做什么吗 还有,除了十进制,双精度不能做什么 我很难找到(sqroot 5)到2000000以上的幂 e、 g.(3+根(5))提高到300000…这里使用二项式展开时可以使用什么 我能用双精度/十进制吗?主要区别是什么 注意:我想保留答案中小数点前的最后3位小数,以确保100%的准确度。小数点是以10为基数的,这意味着他可以将0.1表示为0.1 double是一个基数为2的二进制-这意味着他不能。(其无穷多的0,1) double可以存

有人能告诉我们十进制变量不能做什么,但同时double可以做什么吗

还有,除了十进制,双精度不能做什么

我很难找到(sqroot 5)到2000000以上的幂

e、 g.(3+根(5))提高到300000…这里使用二项式展开时可以使用什么

我能用双精度/十进制吗?主要区别是什么


注意:我想保留答案中小数点前的最后3位小数,以确保100%的准确度。

小数点是以10为基数的,这意味着他可以将0.1表示为0.1

double是一个基数为2的二进制-这意味着他不能。(其无穷多的0,1)

double可以存储比decimal大得多的数字

十进制更准确。,

简言之:

  • 是十进制浮点类型,因此它可以表示精确的十进制值,例如0.1。它具有相当高的精度,但范围相对有限。它是用软件实现的,所以速度相对较慢
  • /是二进制浮点类型,因此它们只能精确地表示可以精确地用二进制表示的数字,例如,不包括十进制值0.1。它们的精度相对较低,但射程较大。它通常在硬件中实现,因此速度非常快
另外,
float
/
double
表示正无穷大和负无穷大,而“nota number”-
decimal
不表示这些

有关更多信息,请参阅我在和上的文章

decimal.MaxValue = 79,228,162,514,264,337,593,543,950,335

double.MaxValue = 1.7976931348623157E+308

(5.24) ^ 300000 = ???

我认为如果不使用一个比双倍更精确的数学库,你很难将5提升到300000的幂……

你为什么说“无限”?您不应该这样做。@MrLister尝试用二进制文件替换0.1。这个例子是关于0.1是的,但是“无限”是错误的。您可以用有限的小数来表示任何
双精度
值。即使小数的数目可能是几百。@Lister Royi先生说double不能精确地表示0.1,因为十分之一的二进制表示是一个无限重复的序列。每一个二进制分数都可以有限地表示为十进制,但反之亦然。@phoog-在他尝试之前-他不会理解0.1是如何用float/double表示的:(基数2):0.00011001…………十进制更精确,因为它更大-它可以保存更多的信息(96位数据,而double是53位数据)。它也慢了很多,这就是为什么我说十进制有相当高的精度,而浮点/双精度相对较低。“不过,我们将以较快的速度进行编辑。”乔恩·斯基特,谢谢你快速而有意义的回复。您的语句准确地说明了float和decimal之间的区别,但如果您能用一个示例详细说明使用decimal的情况(而不是o.1示例),那就太好了。在计算(3+根5)的值提升到300000的情况下,我希望小数点前有最后3个十进制数(例如,23434888.42343,我希望888是100%准确的)@dnkulkarni:通常,您使用
double
对自然值(例如高度、速度等)进行科学计算和
decimal
用于人工价值(主要是货币)的商业计算,例如,在这里你可以得到精确的0.01美元。围绕这一点,还有其他各种堆栈溢出问题。@MrLister:嗯,尾数的位数。通过调整用于什么的位的数量,您可以拥有一个与
double
大小相同的类型,范围更小但精度更高。但是,是的,我同意“十进制是精确的,双精度是近似的”海报通常不知道他们在说什么:)双精度和十进制都不适合你描述的那种繁重的数学计算。Double用于表示建筑物的高度;十进制很适合表示建筑物的成本;两者都没有你想要的代数运算所需的精度或范围。考虑使用滑铁卢Maple或Mathematica或其他一些特殊用途的数学系统。“Eric lippert,非常感谢。事实上,我正在解决google代码阻塞难题(),我在计算这个繁重的数学运算时遇到了麻烦。有没有什么语言可以直接(不需要任何截断小数点的逻辑等)计算出这个繁重的数学题?c#不适合这种操作吗?