验证小数是否有三个位置

时间:2013-12-10 21:49:12

标签: c# decimal

我有一个十进制字段,我在C#MVC的控制器中收到。我需要知道它的十进制值是否不超过三个位置。

因此接受0.00以及0.01,但0.001将被拒绝。

这样做:

if (discount > 1 || discount< (decimal) 0.01)
{
    // Log error
}

仅部分有效,因为0.00被拒绝。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

在除以小数0.01时,取余数。如果它为零,则在该小数位后面没有值,如果有,则有:

bool hasSomethingAfterSecondDecimalDigit = discount % 0.01m != 0m;

请注意,这也适用于负数。

答案 1 :(得分:2)

Modulo可能比普通的旧整数转换更昂贵的操作:

if((int)(discount*100) != discount*100) { /* more digits than wanted */ }

这两种方式在实践中可能同样快,而且这是个人偏好的问题。

另一种简单明了的方法:

if(Math.Round(discount, 2) != discount) { /* too precise */ }