C# 验证decimal 小数点以及前几位后几位
public class CustomRadixPointAttribute : ValidationAttribute
{
private readonly int _index;
public CustomRadixPointAttribute(int index)
{
_index = index;
}
///
public override bool IsValid(object? value)
{
if (value == null)
{
return true;
}
decimal d = Convert.ToDecimal(value);
decimal d2 = Math.Floor(d * Convert.ToDecimal(Math.Pow(10.0, _index))) / Convert.ToDecimal(Math.Pow(10.0, _index));
if (d == d2)
return true;
return false;
}
}
//以上方法只验证小数点保留几位
/// <summary>
/// 判断小数位数,比如前十后四
/// </summary>
public class CustomNumberDigitsAttribute : ValidationAttribute
{
private readonly int _beforePoint;
private readonly int _afterPoint;
public CustomNumberDigitsAttribute(int beforePoint, int afterPoint) : base()
{
_beforePoint = beforePoint;
_afterPoint = afterPoint;
}
public override bool IsValid(object value)
{
string strValue = value?.ToString();
if (string.IsNullOrWhiteSpace(strValue))
return true;
decimal number = Convert.ToDecimal(strValue);
var strSplit = number.ToString().Split(".");
if (strSplit.Count() == 2)
{
if (strSplit[0].Length <= _beforePoint && strSplit[1].Length <= _afterPoint)
{
return true;
}
}
else
{
if (strSplit[0].Length <= _beforePoint)
{
return true;
}
}
return false;
}
}