问题描述
我们前几天在工作中讨论过这个问题,我希望有一个 Stackoverflow 问题我会向人们指出,所以就这样吧.)
We were discussing this the other day at work and I wish there was a Stackoverflow question I would point people at so here goes.)
有什么区别
和一个十进制
?- 您应该在什么时候(在什么情况下)始终使用
Double
? - 什么时候(在什么情况下)您应该总是使用
十进制
? - 在不属于上述两个阵营之一的情况下,需要考虑的驱动因素是什么?
- What is the difference between a
Double
and aDecimal
? - When (in what cases) should you always use a
Double
? - When (in what cases) should you always use a
Decimal
? - What’s the driving factors to consider in cases that don’t fall into one of the two camps above?
有很多问题与这个问题重叠,但它们往往是在询问某人在特定情况下应该做什么,而不是在一般情况下如何决定.
There are a lot of questions that overlap this question, but they tend to be asking what someone should do in a given case, not how to decide in the general case.
推荐答案
我通常会考虑 自然 vs 人造数量.
I usually think about natural vs artificial quantities.
自然量是指体重、身高和时间.这些永远不会被绝对准确地测量,并且很少有绝对精确的算术概念:您通常不应该将高度相加,然后确保结果完全符合预期.对这种数量使用 double
.双打的范围很大,但精度有限;它们也非常快.
Natural quantities are things like weight, height and time. These will never be measured absolutely accurately, and there's rarely any idea of absolutely exact arithmetic on it: you shouldn't generally be adding up heights and then making sure that the result is exactly as expected. Use double
for this sort of quantity. Doubles have a huge range, but limited precision; they're also extremely fast.
占主导地位的人造数量是金钱.有正好 10.52 美元"这样的东西,如果你加上 48 美分,你预计正好有 11 美元.对这种数量使用 decimal
.理由:考虑到一开始是人为的,所涉及的数字也是人为的,旨在满足人类的需求——这意味着它们自然地以 10 为基数表示.使存储表示与人类表示相匹配.decimal
没有 double
的范围,但大多数人工量也不需要那个额外的范围.它也比 double
慢,但我个人有一个银行账户,它给我的正确答案比错误答案快:)
The dominant artificial quantity is money. There is such a thing as "exactly $10.52", and if you add 48 cents to it you expect to have exactly $11. Use decimal
for this sort of quantity. Justification: given that it's artificial to start with, the numbers involved are artificial too, designed to meet human needs - which means they're naturally expressed in base 10. Make the storage representation match the human representation. decimal
doesn't have the range of double
, but most artificial quantities don't need that extra range either. It's also slower than double
, but I'd personally have a bank account which gave me the right answer slowly than a wrong answer quickly :)
有关更多信息,我有关于 .NET 二进制浮点类型的文章 和 .NET 十进制类型.(请注意,decimal
也是浮点类型 - 但有问题的点"是小数点,而不是二进制点.)
For a bit more information, I have articles on .NET binary floating point types and the .NET decimal type. (Note that decimal
is a floating point type too - but the "point" in question is a decimal point, not a binary point.)
这篇关于在 .net 中,如何在十进制和双精度之间进行选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!