如何检查一个十进制值是否不超过两个小数位?

4
我有一个如下的方法:
public bool IsValid(decimal rate)
{
  // 
}

速率可以在0.00和99.99之间,并且不应包含超过2个小数位,否则应抛出异常。

如何检查小数值是否没有超过2个小数点?例如,99.123是无效的,而99.12是有效的。


答案取决于检查发生的位置。如果您正在检查来自用户的输入,请先使用正则表达式验证输入字符串,然后再将其转换为数字。 - Bill
4个回答

15

怎么样:

return decimal.Round(rate, 2) == rate;
注意,这仍将返回100.000m的真值,该值与100.00m是不同的,如果调用ToString,它将显示所有三个小数位。

6
public bool IsValid(decimal rate)
{
    return rate%0.01m == 0;
}

如果速率模 .01 的结果为 0,这将返回 true(如果十进制数只包含一到两个小数位,则始终如此)。如果小数点后有三个或更多的小数位,它将返回 false(除非第三个小数位是 0,例如:2.220 在这种情况下将返回 true)。我不确定你打算用这个做什么,但如果这是可以接受的失败情况,那么这将起作用。


0
public bool IsValid(decimal rate){
    int temp = rate * 100;
    decimal temp2 = temp / (decimal)100;
    return temp2 == rate;
}

-1
Dim s.myscript As String
dim text_value as double = "12.345" 
s = text_value.ToString
' Split string based on dot
words = s.Split(New Char() {"."c})
'if array contain decimal
If words.Length > 1 Then
If (words(1).Length > 2) = True Then
 myscript = "<script language='javascript'>alert('Please enter 2 decimal places only!');</script>"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "onclick", myscript)

Exit Sub
End If
End If  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接