在.NET中,十进制、浮点和双精度之间有什么区别?
什么时候有人会用这些?
在.NET中,十进制、浮点和双精度之间有什么区别?
什么时候有人会用这些?
当前回答
精度是主要区别。
浮点-7位(32位)
双-15-16位(64位)
十进制-28-29位有效数字(128位)
小数具有更高的精度,通常用于要求高精度的金融应用中。小数比双/浮点数慢得多(在某些测试中高达20倍)。
小数和浮点数/双数不能在没有掷骰的情况下进行比较,而浮点数和双数可以进行比较。小数也允许编码或尾随零。
float flt = 1F/3;
double dbl = 1D/3;
decimal dcm = 1M/3;
Console.WriteLine("float: {0} double: {1} decimal: {2}", flt, dbl, dcm);
结果:
float: 0.3333333
double: 0.333333333333333
decimal: 0.3333333333333333333333333333
其他回答
我不会重复在其他回答和评论中已经回答的大量好的(和一些坏的)信息,但我会用提示回答您的后续问题:
什么时候有人会用这些?
对计数值使用十进制
测量值使用浮点/双精度
一些示例:
钱(我们是数钱还是量钱?)距离(我们是计算距离还是测量距离?*)分数(我们是计算分数还是衡量分数?)
我们总是数钱,不应该量钱。我们通常测量距离。我们经常计算分数。
*在某些情况下,我称之为名义距离,我们可能确实需要“计算”距离。例如,也许我们正在处理显示到城市距离的国家标志,我们知道这些距离永远不会超过一个十进制数字(xxx.x km)。
精度是主要区别。
浮点-7位(32位)
双-15-16位(64位)
十进制-28-29位有效数字(128位)
小数具有更高的精度,通常用于要求高精度的金融应用中。小数比双/浮点数慢得多(在某些测试中高达20倍)。
小数和浮点数/双数不能在没有掷骰的情况下进行比较,而浮点数和双数可以进行比较。小数也允许编码或尾随零。
float flt = 1F/3;
double dbl = 1D/3;
decimal dcm = 1M/3;
Console.WriteLine("float: {0} double: {1} decimal: {2}", flt, dbl, dcm);
结果:
float: 0.3333333
double: 0.333333333333333
decimal: 0.3333333333333333333333333333
对于游戏和嵌入式系统等内存和性能都至关重要的应用程序,浮点运算通常是数字类型的选择,因为它速度更快,大小只有双倍运算的一半。整数曾经是首选的武器,但在现代处理器中,浮点性能已经超过了整数。十进制是正确的!
每种方法的主要区别在于精度。
float是32位数字double是64位数字十进制是128位数字
Double和float可以被整数零除,在编译和运行时都没有异常。小数不能除以整数零。如果你这样做,编译总是会失败。