在.NET中,十进制、浮点和双精度之间有什么区别?
什么时候有人会用这些?
在.NET中,十进制、浮点和双精度之间有什么区别?
什么时候有人会用这些?
当前回答
浮动:±1.5 x 10^-45至±3.4 x 10^38(~7个有效数字双倍:±5.0 x 10^-324至±1.7 x 10^308(15-16个有效数字)小数:±1.0 x 10^-28至±7.9 x 10^28(28-29个有效数字)
其他回答
正如前面提到的,整数是整数。他们无法存储点,例如.7、.42和.007。如果需要存储非整数的数字,则需要不同类型的变量。您可以使用double类型或float类型。您以完全相同的方式设置这些类型的变量:键入double或float,而不是使用int。这样地:
float myFloat;
double myDouble;
(float是“浮点”的缩写,意思是一个末尾有点的数字。)
两者的区别在于它们所能容纳的数字的大小。对于浮点数,您的数字最多可以有7位。对于双打,最多可以有16位数字。更准确地说,这里是官方尺寸:
float: 1.5 × 10^-45 to 3.4 × 10^38
double: 5.0 × 10^-324 to 1.7 × 10^308
float是32位数字,double是64位数字。
双击新按钮以获取代码。在按钮代码中添加以下三行:
double myDouble;
myDouble = 0.007;
MessageBox.Show(myDouble.ToString());
停止程序并返回编码窗口。更改此行:
myDouble = 0.007;
myDouble = 12345678.1234567;
运行程序并单击双击按钮。消息框正确显示数字。不过,在末尾添加另一个数字,C#将再次向上或向下舍入。寓意是,如果你想要准确,请小心四舍五入!
Decimal、Double和Float变量类型在存储值的方式上有所不同。精度是主要区别,其中float是单精度(32位)浮点数据类型,double是双精度(64位)浮点类型,decimal是128位浮点数据类型。
浮点-32位(7位)
双64位(15-16位)
十进制-128位(28-29位有效数字)
有关…的详细信息。。。十进制、浮点和双精度之间的差异
float(System.Single的C#别名)和double(System.double的C#别名。float为32位;double是64位。换句话说,它们表示如下数字:
10001.10010110011
二进制数和二进制点的位置都在值中编码。
decimal(System.decimal的C#别名)是浮点小数点类型。换句话说,它们表示如下数字:
12345.65789
同样,小数点的数字和位置都编码在值中——这使得小数点仍然是浮点类型而不是定点类型。
需要注意的重要一点是,人类习惯于以十进制形式表示非整数,并期望以十进制表示得到精确的结果;并不是所有的十进制数字都可以用二进制浮点表示,例如0.1,所以如果使用二进制浮点值,实际上会得到0.1的近似值。当使用浮点小数点时,仍然会得到近似值——例如,1除以3的结果无法精确表示。
至于在以下情况下使用什么:
对于“自然精确小数”的值,最好使用小数。这通常适用于人类发明的任何概念:财务价值是最明显的例子,但也有其他例子。例如,考虑给潜水员或滑冰运动员的分数。对于那些本质上更为人为的、无论如何都无法精确测量的值,浮点/双精度更为合适。例如,科学数据通常以这种形式表示。在这里,原始值从一开始就不是“小数精度”的,因此对于预期结果来说,保持“小数精度精度”并不重要。浮点二进制点类型比小数更快。
在.Net(c#)中定义十进制、浮点和双精度
您必须将值提到为:
Decimal dec = 12M/6;
Double dbl = 11D/6;
float fl = 15F/6;
并检查结果。
每个占用的字节为
Float - 4
Double - 8
Decimal - 12
我不会重复在其他回答和评论中已经回答的大量好的(和一些坏的)信息,但我会用提示回答您的后续问题:
什么时候有人会用这些?
对计数值使用十进制
测量值使用浮点/双精度
一些示例:
钱(我们是数钱还是量钱?)距离(我们是计算距离还是测量距离?*)分数(我们是计算分数还是衡量分数?)
我们总是数钱,不应该量钱。我们通常测量距离。我们经常计算分数。
*在某些情况下,我称之为名义距离,我们可能确实需要“计算”距离。例如,也许我们正在处理显示到城市距离的国家标志,我们知道这些距离永远不会超过一个十进制数字(xxx.x km)。