场景

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为小数位数。

效果

格式化前

 

 

格式化后

 

 

posted on 2020-06-05 11:23  霸道流氓  阅读(873)  评论(0编辑  收藏  举报

Live2D