C#要浮动的字符串

C#要浮动的字符串,c#,C#,当我把一个字符串转换成浮点数时,我得到的答案加上一堆垃圾小数。我该如何解决这个问题?这是我看到的浮动错误吗 string myFloat = "1.94"; float f = float.Parse(myFloat); 由于数据库原因,它需要是一个浮动 我所说的垃圾是指1.94变成:1.9400005722046你可以把它改成一个双精度来获得更精确的表示,但如果你需要的话 您无法修复这一问题。这是计算机中浮点数的表示方式。如果使用decimal数据类型,将得到精确的表示形式 string m

当我把一个字符串转换成浮点数时,我得到的答案加上一堆垃圾小数。我该如何解决这个问题?这是我看到的浮动错误吗

string myFloat = "1.94";
float f = float.Parse(myFloat);
由于数据库原因,它需要是一个浮动


我所说的垃圾是指1.94变成:1.9400005722046

你可以把它改成一个双精度来获得更精确的表示,但如果你需要的话 您无法修复这一问题。这是计算机中浮点数的表示方式。如果使用decimal数据类型,将得到精确的表示形式

string myFloat = "1.94";
decimal f = decimal.Parse(myFloat);

然后在将其存储到数据库时将其转换为double。数据库中仍然可能有一些噪音。确保消除这种情况的唯一方法是在数据库中使用numeric

问题在于,如果需要解析数字的精确表示,则不能使用float/double。如果需要,您必须使用
十进制
。对于货币金额,几乎总是需要使用
十进制
。所以请记住这一点

请阅读浮点数如何在内部表示:

可在此计算器中测试1.94如何在内部由浮点表示:

如您所见,它的
1.94000057220458984375


数据库支持
decimal
数据类型:

  • Oracle提供十进制:
  • SQL Server提供十进制:
  • MySQL提供十进制:

查看IEEE浮点数标准,我怀疑1.94是一个实际存在的浮点数,您得到的另一个垃圾值是用于产生最接近1.94的可能表示形式的值(分数位的形式为1/2^n,因此您永远不会得到0.94)1.94000001或1.9399998这些小数点在哪里?在
f
中返回的确切值是多少Jon Skeet对tony的一次有趣的谈话。我建议你去读一读。另外sqlservers float实际上是一个双精度函数,它会给你一个更准确的表示