【发布时间】:2013-07-12 17:37:49
【问题描述】:
我需要将一个数字截断到小数点后 2 位,这基本上意味着 砍掉多余的数字。
例如:
2.919 -> 2.91
2.91111 -> 2.91
为什么?这就是 SQL 服务器在存储多个 特别精确。例如,如果一列是 Decimal(8,2),并且您尝试 插入/更新数字 9.1234,3 和 4 将被截断。
我需要在 c# 代码中做同样的事情。
我能想到的唯一可能的方法是:
-
仅使用 stringformatter 将其“打印”出来 两位小数,然后转换为小数, 例如:
decimal tooManyDigits = 2.1345 decimal ShorterDigits = Convert.ToDecimal(tooManyDigits.ToString("0.##")); // ShorterDigits is now 2.13我对此不满意,因为它涉及到字符串,然后 另一个字符串到十进制的转换,这似乎有点疯狂。
-
使用 Math.Truncate (它只接受一个整数),所以我 可以将它乘以 100,截断它,然后除以 100。例如:
decimal tooLongDecimal = 2.1235; tooLongDecimal = Math.Truncate(tooLongDecimal * 100) / 100;我对此也不满意,因为如果 tooLongDecimal 为 0, 我会得到除以 0 的错误。
当然有更好+更简单的方法!有什么建议吗?
【问题讨论】:
-
0/100不是除以 0 错误。这是0,这是您所期望的。 -
@sehe truncate != round
-
是的。我注意到。但是,不能撤回投票。对不起
-
@Paolo Moretti:“根据 MSDN 将 d 舍入到最接近零的整数”。从技术上讲,虽然这种方法仍然是四舍五入,但没关系。
标签: c#