namespace DS.Module.Core;
///
/// Decimal 工具类
///
public static class DecimalUtil
{
///
/// 获得decimal的精度
///
///
///
public static int Precise(this decimal value)
{
var s = value.ToString();
if (!s.Contains('.'))
{
return 0;
}
return s.Length - s.IndexOf('.') - 1;
}
///
/// 检查金额, 最大值为8位数字
///
/// 金额
/// 标题
/// 是否忽略最大值检查 默认为否
/// 小数位数
///
public static (bool isSuccess, string errMsg) CheckMoney(this decimal money, string title, bool ignoreMax = false,
int maxDigit = 8, int digit = 3)
{
// 0或者负数检查
if (money <= 0M)
{
return (false, $"{title}不为0或负");
}
// 最大值检查
if (!ignoreMax)
{
decimal maximum = NumberConst.MAX_8;
switch (maxDigit)
{
case 5:
maximum = NumberConst.MAX_5;
break;
default:
maximum = NumberConst.MAX_8;
break;
}
if (money > maximum)
{
return (false, $"{title}不能超过最大值");
}
}
// 两位有效小数检查
int precise = money.Precise();
if (precise > digit)
{
return (false, $"{title}位数超出范围");
//return (false, $"{title}最多有两位小数");
}
return (true, string.Empty);
}
}