根据gbt81702008数值修约的C#函数

cs 复制代码
#region 修约函数
        /// </summary>
        /// <param name="data_val">输入数值</param>
        /// <param name="len">保留几位小数</param>
        /// <returns></returns>
        public static decimal round_gbt8170(decimal data_val,int len)
        {
            string num = data_val.ToString();
            string zs = num.Split('.')[0];//整数
            string xs = "";
            if(num.Split('.').Length>0)
                xs = num.Split('.')[1];//小数数
            if (len>= xs.Length)//小数位数<=需要保留几位小数
            {
                xs = xs.ToString().PadRight(len, '0');

            }
            else 
            {
                string lxs = "";
                if(len>1)
                    lxs = xs.Substring(0, len - 1);
                int ds = Convert.ToInt32(xs.Substring(len - 1, 1));//取保留小数位数的数字
                int ns =Convert.ToInt32(xs.Substring(len , 1));//取保留小数位数的下一位数字
                if (ns < 5)//舍去
                {
                    xs = lxs + ds.ToString();
                }
                else if (ns >5)//进1
                {
                    xs = lxs + (ds+1).ToString();
                }
                else if (ns ==5)
                {

                
                    string hs = "";//取保留小数位数的下一位数字的后面所有数字
                    if (xs.Length - 1 > len)
                        hs = xs.Substring(len + 1);
                    if (hs != "" && Convert.ToInt32(hs) > 0)   //舍弃数字的最左一位数字是 5,且其后有非0数字时进一,即保留数字的末位数字加1
                        xs = lxs + (ds + 1).ToString();
                    else //拟舍弃数字的最左一位数字为5,且其后无数字或皆为0时,若所保留的末位数字为奇数(1,3,5,7,9)则进一,即保留数字的末位数字加1;若所保留的末位数字为偶数(0,2,4,6,8),则舍去。
                    {
                        if(ds%2==0) //所保留的末位数字为偶数(0, 2, 4, 6, 8),则舍去
                        {
                            xs = lxs + ds.ToString();

                        }
                        else  if (ds % 2 ==1) //,若所保留的末位数字为奇数(1,3,5,7,9)则进一,即保留数字的末位数字加1
                        {
                            xs = lxs + ds.ToString();
                            xs = lxs + (ds + 1).ToString();
                        }
                    }
                 
                }
            }
            decimal fh = data_val;
            if (len > 0)
                fh = Convert.ToDecimal(zs + "." + xs);
            else
                fh = Convert.ToDecimal(zs);
            return fh;
        }
        #endregion
相关推荐
闻缺陷则喜何志丹4 小时前
【C++特性及类库】多线程
开发语言·c++·多线程·语言特性·系统库
dtq04244 小时前
C++3 - 分支语句if和string变量
开发语言·c++·学习
jimy14 小时前
c++类成员访问只看静态类型
开发语言·c++
她的男孩4 小时前
JAR 全对仍 checksum mismatch:Forge Admin 把 Flyway 从 filesystem 改成 classpath
java·数据库·spring boot
鬼手点金4 小时前
如何选择模型
java·前端·人工智能·git·深度学习
156082072194 小时前
银河麒麟 Qt 可执行文件打包说明
开发语言·驱动开发·qt
古法老登瞎折腾4 小时前
大数据智能运维实战(三):实现第一个运维 MCP 工具——查询节点与组件状态
java·大数据·运维·人工智能·spring ai·mcp
小蒜学长4 小时前
基于数据挖掘的京东商城商品推荐系统设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·推荐系统·个性化推荐
SEO_juper4 小时前
手写 llms.txt 验证器:让 AI 更愿意引用你的网站(GEO)
开发语言·人工智能·python·聚类·seo·独立站
CCCCCCCCharlie4 小时前
从0到1:一个字节的磁盘之旅
linux·开发语言·c++