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提供十进制:
f
中返回的确切值是多少Jon Skeet对tony的一次有趣的谈话。我建议你去读一读。另外sqlservers float实际上是一个双精度函数,它会给你一个更准确的表示