场景:
最近在写代码的时候遇到提示语金额后面无效0过多的问题,比如
用户输入金额:500元,
因为数据库是有对于decimal有限制的[Column(TypeName = "numeric(18,6)")],小数位可以达到6位
则保存到数据库保存之后变成了500.000000。
提示语:变动金额不能超过500元
实际上提示语变成了:变动金额不能超过500.000000元
末尾的小数位着实看着有点别扭,所以建议直接将小数位末尾后无效的0去掉。
我也看了大多数的方案是保留N位小数去掉之后的0,
但是这样子容易弄掉精准数据:比如500.001000,保留N位小数,去掉末尾的0,比如保留2位小数变成了:500.00 ,和实际的500.001 就有差异了,无法确认第几位小数是有效值,所以也是我这里可取的方案。
经过试验,归纳出一下代码:
/// <summary>
/// 去掉小数位后面的无效的0
/// </summary>
/// <param name="num"></param>
/// <returns></returns>
public static string TrimEndZero(decimal num)
{
if (num == 0) return "0";
decimal floorNumber;
if (num < 0)
{
//负数部分
floorNumber = Math.Ceiling(num);
}
else
{
//非负数部分
floorNumber = Math.Floor(num);
}
var diff = num - floorNumber; //得到0.几的小数
if (diff == 0)
{
//是一个整数
return num.ToString("#");
}
else
{
//是小数
return num.ToString().TrimEnd('0');
}
}