我猜这是由于浮点和准确性造成的,但我只是想检查一下以确保没有遗漏任何其他内容。
我有一个 1007.62 的浮点数(存储在 info.Amount 中),该浮点数乘以 100 并转换为 long。此时我得到的值为 100761。
这只是我们在应用双打时遇到的旧舍入错误吗?我认为这种情况可能发生的唯一方法是,如果它实际上存储为 1007.6199999999999 (但为了显示目的而四舍五入)。那么乘法之后转换为 long 会忽略小数点后的所有内容吗?
您可以使用转换为Int64 http://msdn.microsoft.com/de-de/library/system.convert.toint64%28v=vs.110%29.aspx反而。这会产生正确的值。
LinqPad-测试代码:
float z = 1007.62f;
z.Dump();
float x = z *100;
x.Dump();
long l = (long) (z*100);
l.Dump();
l = Convert.ToInt64(z*100);
l.Dump();
l = Convert.ToInt64(x);
l.Dump();
结果是:
1007,62
100762
100761
100762
100762
演员阵容(long) (z*100)
使用 CIL 指令conv.i8
转换为 Int64,将 Int64 压入堆栈,而Convert.ToInt64
uses Math.Round(double)
转换/转换为 Int64。
特别说明conv.i8
is
从浮点数到整数值的转换会截断
数趋于零。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)