双打没有小数位- 它们不是基于十进制数字开头的。您可以得到“截断为三个十进制数字时最接近当前值的双精度数”,但是它仍然不会完全相同。最好使用decimal
。
话虽如此,如果仅是四舍五入发生问题的方式,则可以使用Math.Truncate(value * 1000) / 1000;
后者 来 完成您想要的事情。(从声音上,您根本不需要 四舍五入 。)尽管如此,它仍然可能是“狡猾的”,因为结果实际上仍然不会只有三位小数。但是,如果使用十进制值执行相同的操作,则 可以 使用:
decimal m = 12.878999m;
m = Math.Truncate(m * 1000m) / 1000m;
Console.WriteLine(m); // 12.878
编辑:正如LBushkin所指出的,您应该在为 显示 目的而截断(通常可以在格式说明符中完成)与为进一步的计算而截断(在这种情况下,上面的方法应该有效)之间是清楚的。