Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在.net中,如何在十进制和双精度之间进行选择_.net_Floating Point - Fatal编程技术网

在.net中,如何在十进制和双精度之间进行选择

在.net中,如何在十进制和双精度之间进行选择,.net,floating-point,.net,Floating Point,前几天我们在工作中讨论过这个问题,我希望有一个Stackoverflow问题,我可以告诉大家,就这样吧。) a和a的区别是什么 什么时候(在什么情况下)您应该始终使用双重密码 什么时候(在什么情况下)应该始终使用十进制 在不属于上述两大阵营之一的情况下,需要考虑的驱动因素是什么 有很多问题与这个问题重叠,但它们往往是问某人在给定情况下应该做什么,而不是在一般情况下如何决定。如果你想保持真正的精确性,请使用十进制 如果要比较值,请使用decimal 如果您使用双倍并执行此操作 ? ctype(

前几天我们在工作中讨论过这个问题,我希望有一个Stackoverflow问题,我可以告诉大家,就这样吧。)

  • a和a的区别是什么
  • 什么时候(在什么情况下)您应该始终使用
    双重密码
  • 什么时候(在什么情况下)应该始终使用
    十进制
  • 在不属于上述两大阵营之一的情况下,需要考虑的驱动因素是什么

有很多问题与这个问题重叠,但它们往往是问某人在给定情况下应该做什么,而不是在一般情况下如何决定。

如果你想保持真正的精确性,请使用十进制

如果要比较值,请使用decimal

如果您使用双倍并执行此操作

? ctype(1.0, Double ) / 3
? ctype(1.0, Decimal ) /3
你会得到

0.33331

如果使用十进制并执行此操作

? ctype(1.0, Double ) / 3
? ctype(1.0, Decimal ) /3
你会得到

0.3333333D

还有一个例子,极端的例子

  decimal dec = new decimal(1, 1, 1, false, 28);
  var dou = (double)dec;
会产生这个,double会失去一些精度

??窦
0.00000000 18446744078004519
? 十二月
0.0000000018446744078004518913D

最后,

double=近似值

十进制我通常考虑自然量和人工量

自然量是指体重、身高和时间。这些永远不会被绝对准确地测量,也很少有绝对准确的算术概念:你通常不应该把高度加起来,然后确保结果完全符合预期。对于此类数量,请使用
double
。双打的射程很大,但精确度有限;它们也非常快

主要的人为数量是货币。有一种说法是“正好10.52美元”,如果你再加上48美分,你就可以得到正好11美元。对于此类数量,请使用
decimal
。理由:考虑到一开始是人为的,所涉及的数字也是人为的,旨在满足人类的需求——这意味着它们自然地以10为基数来表达。使存储表示与人工表示匹配
decimal
没有双精度的范围,但是大多数人工量也不需要这个额外的范围。它也比double慢,但我个人有一个银行账户,它给了我正确答案的速度比错误答案的速度慢:)


关于更多信息,我有关于和的文章。(请注意,
decimal
也是一种浮点类型,但所讨论的“点”是一个小数点,而不是一个二进制点。)

SQL Server 还值得一提的是,SQL Server中的十进制映射到.net framework中的十进制和可为空的十进制。而sql server中的float映射为Double和可为null的Double。以防万一你最终会遇到一个数据库应用程序

Oracle 我不再使用oracle,因为您可以在我的个人资料信息中看到它被划掉了:),但是对于那些使用oracle的人,这里有一篇MSDN文章映射oracle数据类型:


定义“实际精度”。。。记住1米除以3的结果。你是说十进制是双精度的,就像双精度是浮动的吗?@Ian-他说用十进制表示货币,用双精度表示近似值,为什么人们要偷偷摸摸+1.fredou@Fredou:因此,在1/3的情况下,您仍然会丢失十进制的信息。再一次,你能定义一下“真正的精度”是什么意思吗?伊恩的评论很贴切-我已经知道double和decimal的行为,但是decimal给你“真正的精度”的想法对于任何直观的“真正的精度”都是误导性的。“它也比decimal慢,但我个人有一个银行帐户”我相信你想说“它也比double慢”:)+1,但是请详细解释一下,在使用oracle from.netsee时,这在oracle中是如何工作的。不过,这主要是关于植入细节,而不是“为什么”可能的复制