我有一个十进制字段,我在C#MVC的控制器中收到。我需要知道它的十进制值是否不超过三个位置。
因此接受0.00以及0.01,但0.001将被拒绝。
这样做:
if (discount > 1 || discount< (decimal) 0.01)
{
// Log error
}
仅部分有效,因为0.00被拒绝。我怎么能这样做?
答案 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 */ }