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

     /// <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);
            }
        }

原文地址:https://www.cnblogs.com/elves/p/10829767.html

时间: 2024-08-03 11:07:00

四舍六入五成双并保留一位有效位-数据修约的相关文章

JS toFixed 四舍六入五成双

以前一直以为toFixed就是四舍五入的方法,后来又有一段时间以为toFixed是五舍六入.今天终于写的时候,终于才知道toFixed是一个叫做四舍六入无成双的诡异的方法... 完全不明白为什么要这么写... 什么是四舍六入五成双:百度是这么说的: 对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是"四舍六入五成双",也即"4舍6入5凑偶"这里"四"是指≤4 时舍去,"六&q

四舍六入五成双(四舍六入奇偶效验)银行家算法

规则: 四舍六入五考虑. 五后非零就进一, 五后皆零看奇偶, 五前为偶应舍去, 五前为奇要进一. c#: Math.Round(new Decimal(1.2050),2) 1.2 Math.Round(new Decimal(1.2150),2) 1.22 Math.Round(new Decimal(1.2250),2) 1.22 Math.Round(new Decimal(1.2350),2) 1.24 Math.Round(new Decimal(1.2450),2) 1.24 Mat

算法:四舍六入五成双 ,保留三位有效数字

/// <summary> /// 格式化 Decimal 数字 用于有效计算 /// </summary> /// <param name="ori"></param> /// <returns></returns> /// <remarks></remarks> public static decimal FormatDecimal(decimal ori) { if (ori == 0

四舍六入五成双银行家算法的 PHP和Javascript实现

四舍六入五成双 http://baike.baidu.com/view/1245064.htm?fr=aladdin 四舍六入五成双是一种比较精确比较科学的计数保留法,是一种数字修约规则. 对于位数很多的近似数,当有效位数确定后,其后面多余的数字应该舍去,只保留有效数字最末一位,这种修约(舍入)规则是“四舍六入五成双”,也即“4舍6入5凑偶”这里“四”是指≤4 时舍去,"六"是指≥6时进上,"五"指的是根据5后面的数字来定,当5后有数时,舍5入1:当5后无有效数字时

C#四舍六入五留双

/// <summary> /// 小数保留位数处理 /// </summary> /// <param name="value">值</param> /// <param name="digitNum">保留位数</param> /// <param name="MR">数学舍入方法</param> /// <returns></r

String转换成float并且保留两位小数,购物车计算价格

方法1: 用DecimalFormat 返回的是String格式的.该类对十进制进行全面的封装.像%号,千分位,小数精度.科学计算. float perPrice=Float.parseFloat(textView_price_shopCar.getText().toString()) * count;//String类型转换成float类型 DecimalFormat decimalFormat=new DecimalFormat(".00");//构造方法的字符格式这里如果小数不足

javascript实现保留两位小数的多种方法

这篇文章主要介绍了javascript实现保留两位小数的多种方法,如果数字的原本小数位数不到两位,那么缺少的就自动补零,感兴趣的小伙伴们可以参考一下 第一种方法:javascript实现保留两位小数一位自动补零代码实例:第一种方法介绍一下如何实现对数字保留两位小数效果,如果数字的原本小数位数不到两位,那么缺少的就自动补零,这个也是为了统一的效果,先看代码实例: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function returnFloat(value)

java,中双精度double控制保留两位小数,js控制两位小数

Java DecimalFormat dcmFmt = new DecimalFormat("0.00"); double db = 12333.353; System.out.println(dcmFmt.format(db)); JS <script type="text/javascript"> //保留两位小数 //功能:将浮点数四舍五入,取小数点后2位 function toDecimal(x) { var f = parseFloat(x);

javascript保留两位小数

<script type="text/javascript"> //保留两位小数 //功能:将浮点数四舍五入,取小数点后2位 function toDecimal(x) { var f = parseFloat(x); if (isNaN(f)) { return; } f = Math.round(x*100)/100; return f; } //制保留2位小数,如:2,会在2后面补上00.即2.00 function toDecimal2(x) { var f = p