在.NET中,十进制、浮点和双精度之间有什么区别?
什么时候有人会用这些?
在.NET中,十进制、浮点和双精度之间有什么区别?
什么时候有人会用这些?
当前回答
Decimal、Double和Float变量类型在存储值的方式上有所不同。精度是主要区别,其中float是单精度(32位)浮点数据类型,double是双精度(64位)浮点类型,decimal是128位浮点数据类型。
浮点-32位(7位)
双64位(15-16位)
十进制-128位(28-29位有效数字)
有关…的详细信息。。。十进制、浮点和双精度之间的差异
其他回答
+---------+----------------+---------+----------+---------------------------------------------------------+
| C# | .Net Framework | Signed? | Bytes | Possible Values |
| Type | (System) type | | Occupied | |
+---------+----------------+---------+----------+---------------------------------------------------------+
| sbyte | System.Sbyte | Yes | 1 | -128 to 127 |
| short | System.Int16 | Yes | 2 | -32,768 to 32,767 |
| int | System.Int32 | Yes | 4 | -2,147,483,648 to 2,147,483,647 |
| long | System.Int64 | Yes | 8 | -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
| byte | System.Byte | No | 1 | 0 to 255 |
| ushort | System.Uint16 | No | 2 | 0 to 65,535 |
| uint | System.UInt32 | No | 4 | 0 to 4,294,967,295 |
| ulong | System.Uint64 | No | 8 | 0 to 18,446,744,073,709,551,615 |
| float | System.Single | Yes | 4 | Approximately ±1.5e-45 to ±3.4e38 |
| | | | | with ~6-9 significant figures |
| double | System.Double | Yes | 8 | Approximately ±5.0e-324 to ±1.7e308 |
| | | | | with ~15-17 significant figures |
| decimal | System.Decimal | Yes | 16 | Approximately ±1.0e-28 to ±7.9e28 |
| | | | | with 28-29 significant figures |
| char | System.Char | N/A | 2 | Any Unicode character (16 bit) |
| bool | System.Boolean | N/A | 1 / 2 | true or false |
+---------+----------------+---------+----------+---------------------------------------------------------+
请参阅此处了解更多信息。
Double和float可以被整数零除,在编译和运行时都没有异常。小数不能除以整数零。如果你这样做,编译总是会失败。
十进制结构严格适用于要求精确性的财务计算,这些计算相对不允许四舍五入。然而,小数不足以用于科学应用,原因如下:
由于所测量的物理问题或伪影的实际限制,在许多科学计算中,一定程度的精度损失是可以接受的。在金融领域,精度的损失是不可接受的。对于大多数操作,十进制比浮点运算和双精度运算慢得多,这主要是因为浮点运算是以二进制进行的,而十进制运算是以10为基数进行的(即浮点运算和双倍运算是由FPU硬件处理的,如MMX/SSE,而小数是在软件中计算的)。尽管十进制支持更多位数的精度,但它的值范围比双精度小得令人无法接受。因此,十进制不能用来表示许多科学价值。
正如前面提到的,整数是整数。他们无法存储点,例如.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#将再次向上或向下舍入。寓意是,如果你想要准确,请小心四舍五入!
浮点7位精度
双精度约为15位
十进制大约有28位精度
如果您需要更好的精度,请使用double而不是float。在现代CPU中,两种数据类型的性能几乎相同。使用浮子的唯一好处是它们占用更少的空间。只有当你有很多人的时候,才有实际意义。
我觉得这很有趣。每个计算机科学家都应该知道浮点运算