场景
C#中怎样格式化小数位数为指定位数的工具类。
注:
实现
首先新建工具类DataProcessor,然后在工具类下新建方法FormatFloatValue
/// <summary>
/// 格式化小数位数
/// </summary>
/// <param name="floatValue">要格式化的小数对象</param>
/// <param name="maxPrecision">保留的最大小数位数</param>
/// <returns>返回格式化后的小数字符串值</returns>
public static object FormatFloatValue(object floatValue, int maxPrecision)
{
if (IsNullOrEmpty(floatValue))
{
return String.Empty;
}
else
{
int intPrecision = GetValidPrecision(floatValue, maxPrecision);
return String.Format("{0:f" + intPrecision + "}", floatValue);
}
}
其中用到了获取浮点数值的有效小数位数的方法GetValidPrecision
/// <summary>
/// 获取浮点数值的有效小数位数
/// </summary>
/// <param name="value">浮点数值</param>
/// <param name="maxPrecision">允许返回的最大小数位数</param>
/// <returns>返回有效小数位数</returns>
public static int GetValidPrecision(object value, int maxPrecision)
{
if (DataProcessor.IsNullOrEmpty(value))
{
return 0;
}
else
{
if (value.ToString().IndexOf(".") == -1)
{
return 0;
}
else
{
string strValue = value.ToString();
string precision = strValue.Substring(strValue.IndexOf(".") + 1);
int cnt = 0; //保存末尾0的个数
for (int i = precision.Length - 1; i > 0; i--)
{
if (precision.ToCharArray()[i] == '0')
{
cnt++;
}
else
{
break;
}
}
int result = precision.Length - cnt; //为有效小数位数
if (result > maxPrecision)
{
return maxPrecision;
}
else
{
return result;
}
}
}
}
这其中又用到了判空的方法IsNullOrEmpty
/// <summary>
/// 判断是否为空
/// </summary>
/// <param name="value">要判断的对象</param>
/// <returns>为空返回true,否则返回false</returns>
public static bool IsNullOrEmpty(object value)
{
if (value == null || value == DBNull.Value || string.IsNullOrWhiteSpace(value.ToString()))
{
return true;
}
return false;
}
调用示例
object value = DataProcessor.FormatFloatValue(obj, 3);
表示要将小数格式为3为小数位数。
效果
格式化前
格式化后