当我将它从小数转换为浮点数时,为什么我的数字会改变?

时间:2011-05-09 21:35:36

标签: c# asp.net floating-point integer decimal

我将文本框中的小数点存储到如下变量中:

 decimal hiOld = Decimal.Parse(hiCommOld.Text);

所以,基本上hiOld存储的内容如下:46.88。但是当我这样做时:

 ev.hiOldNew = (float)hiOld;

我的系统在DB中存储45.6677878899988(类似这样的)编号。我的DB类型是Float。我想把这个变量作为46.88存储到数据库中。

我该怎么做?


相关:Difference between decimal, float and double in .NET?

2 个答案:

答案 0 :(得分:3)

您实际上正在很好地说明我们为什么需要十进制类型。除少数符合特定要求的数字外,浮点类型不能精确表示数字。就其本质而言,它是近似的。所以你看到的数字与你想要的数字非常接近。

十进制是一种定点类型,它给出了精确的表示,其缺点是它没有双重动态范围。

但是,问题的解决方案只是在数据库中使用正确的类型。假设您使用的是SQL Server,则需要十进制类型:

http://msdn.microsoft.com/en-us/library/ms187746.aspx

答案 1 :(得分:1)

  

我的数据库类型是Double。我只想要   将此变量存储为46.88   DB。

这两句话相互矛盾。如果要将十进制值精确存储在数据库中,请使用DECIMAL或NUMERIC数据库类型。这就是他们的目的。

阅读The Floating-Point Guide了解详情。