场景
C#中怎样格式化小数位数为指定位数的工具类。
注:
博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载
实现
首先新建工具类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为小数位数。
效果
格式化前
格式化后