Как проверить, имеет ли десятичное значение не более 2 десятичных знаков? - PullRequest
3 голосов
/ 02 ноября 2011

У меня есть метод, как показано ниже:

public bool IsValid(decimal rate)
{
  // 
}

Скорость может быть в диапазоне от 0,00 до 99,99, и она не должна содержать более 2 десятичных знаков, в противном случае следует выдать исключение.

Как проверить, имеет ли десятичное значение не более 2 десятичных знаков? например 99.123 является недействительным, тогда как 99.12 является действительным.,

Ответы [ 4 ]

13 голосов
/ 02 ноября 2011

Как насчет:

return decimal.Round(rate, 2) == rate;

Обратите внимание, что это все равно вернет true для 100.000m, что является отличным значением от 100.00m, и будет отображаться со всеми тремя десятичными цифрами, если вы вызовете ToString.

5 голосов
/ 02 ноября 2011
public bool IsValid(decimal rate)
{
    return rate%0.01m == 0;
}

Это вернет true, если коэффициент по модулю .01 равен 0 (который всегда будет, если десятичное число является числом, которое содержит только одно или два десятичных знака).Три десятичных знака больше вернут false (если третье десятичное число равно 0, EX: 2.220 вернет true в этом случае).Я не уверен, для чего вы планируете использовать это, но если это приемлемый случай сбоя, это сработает.

0 голосов
/ 12 марта 2012
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  
0 голосов
/ 02 ноября 2011
public bool IsValid(decimal rate){
    int temp = rate * 100;
    decimal temp2 = temp / (decimal)100;
    return temp2 == rate;
}
...