四舍六入五成双并保留一位有效位-数据修约

Posted elves

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了四舍六入五成双并保留一位有效位-数据修约相关的知识,希望对你有一定的参考价值。

 

     /// <summary>
        /// 数据修约 -- 四舍六入5成双,至少保留一位有效位
        /// 数值0.00512,保留2位,修约为0.01
        /// </summary>
        /// <param name="modifyValue">原始数据</param>
        /// <param name="degit">保留位数</param>
        /// <returns></returns>
        public static string CalcValue(decimal modifyValue, int? degit)
        {
            decimal calValue = 0;
            int degitNotNull = degit ?? 2;

            calValue = Math.Round(modifyValue, degitNotNull);

            //按此修约为0则至少保留1位有效位数
            if (calValue == 0 && modifyValue != 0)
            {
                return modifyValue.ToString("G1");
            }
            else
            {
                return calValue.ToString("F" + degitNotNull);
            }
        }

 

     /// <summary>
        /// 数据修约 -- 四舍六入5成双,至少保留一位有效位
        /// 数值0.00512,保留2位,修约为0.005
        /// </summary>
        /// <param name="modifyValue">原始数据</param>
        /// <param name="degit">保留位数</param>
        /// <returns></returns>
        public static string CalcValue2(decimal modifyValue, int? degit)
        {
            decimal calValue = 0;
            int degitNotNull = degit ?? 2;

            if (Math.Abs(modifyValue) >= 1)
            {
                calValue = Math.Round(modifyValue, degitNotNull);
            }

            //按此修约为0则至少保留1位有效位数
            if (calValue == 0 && modifyValue != 0)
            {
                string value = modifyValue.ToString();
                //从小数点后
                value = value.Substring(value.IndexOf(".") + 1);
                for (int i = 0; i < value.Length; i++)
                {
                    if ((i + 1) < degitNotNull)
                    {
                        calValue = Math.Round(modifyValue, degitNotNull);
                    }
                    else
                    {
                        calValue = Math.Round(modifyValue, (i + 1));
                    }
                }
                return calValue.ToString();
            }
            else
            {
                return calValue.ToString("F" + degitNotNull);
            }
        }

        

 

以上是关于四舍六入五成双并保留一位有效位-数据修约的主要内容,如果未能解决你的问题,请参考以下文章

C# Math.Round

js四舍五入不显示.00

保留一位小数有几种方式?

Python3基础 format 四舍六入五凑偶 保留一位小数

Python3基础 str format 四舍六入五凑偶 保留一位小数

“银行家算法”大揭秘!在前端表格中利用自定义公式实现“四舍六入五成双”