.NET中的decimal
, float
和double
float
什么区别?
有人什么时候会使用其中之一?
#1楼
对我来说,这是一个有趣的话题,因为今天,我们遇到了一个讨厌的小错误,涉及到decimal
比float
精度低。
在我们的C#代码中,我们正在从Excel电子表格中读取数值,将其转换为decimal
,然后将该decimal
发送回Service以保存到SQL Server数据库中。
Microsoft.Office.Interop.Excel.Range cell = …
object cellValue = cell.Value2;
if (cellValue != null)
{
decimal value = 0;
Decimal.TryParse(cellValue.ToString(), out value);
}
现在,对于我们几乎所有的Excel值,此方法都非常有效。 但是对于某些很小的Excel值,使用decimal.TryParse
完全丢失该值。 这样的例子之一是
cellValue = 0.00006317592
Decimal.TryParse(cellValue.ToString(),输出值); //将返回0
奇怪的是,解决方案是先将Excel值转换为double
精度,然后转换为decimal
:
Microsoft.Office.Interop.Excel.Range cell = …
object cellValue = cell.Value2;
if (cellValue != null)
{
double valueDouble = 0;
double.TryParse(cellValue.ToString(), out valueDouble);
decimal value = (decimal) valueDouble;
…
}
即使double
精度不如decimal
精度,这实际上确保了仍然可以识别出较小的数字。 由于某种原因, double.TryParse
实际上能够检索到如此小的数字,而decimal.TryParse
会将它们设置为零。
奇。 很奇怪。
#2楼
如前所述,整数是整数。 他们无法存储点,例如.7,.42和.007。 如果需要存储不是整数的数字,则需要另一种类型的变量。 您可以使用double类型或float类型。 您可以以完全相同的方式设置这些类型的变量:键入double
或float
而不是使用int
字。 像这样:
float myFloat;
double myDouble;
( float
是“ floating point”的缩写,仅表示末尾带有数字的数字。)
两者之间的区别在于它们可以容纳的数字的大小。 对于float
,您的电话号码最多可以包含7位数字。 对于double
,最多可以包含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;
运行您的程序,然后单击您的双按钮。 该消息框正确