• double四舍五入,商品金额大小写转换,设置货币的小数位数跟格式输出,进制转化


     
    1:计算double值四舍五入的方法
    对小数数值进行四舍五入,首先应该确认保留小数位, 如果数值的小数精度大于保留小数位,那么开始四舍五入计算.四舍五入的方法非常简单,在所有要丢失精度的小数位中加5,如果大于10则向前进位,最后计算出四舍五入的结果.
    /// <summary>计算double值四舍五入的方法
            /// 
            /// </summary>
            /// <param name="dbl">进行四舍五入的数值</param>
            /// <param name="i">保留的小数位</param>
            /// <returns>返回四舍五入后的double值</returns>
            internal double Round(double dbl, int i)
            {
                string P_str_dbl = dbl.ToString();//将double数值转换为字符串
                string P_str_lower = //将double数值小数位转换为字符串
                    P_str_dbl.Split('.')[1];
                int P_str_length = P_str_lower.Length;//计算double数值小数位长度
                dbl += GetValue(i, P_str_length);//开始进行四舍五入运算
                P_str_dbl = dbl.ToString();//将运算后的值转换为字符串
                if (P_str_dbl.Contains("."))//判断是否存在小数位
                {
                    string P_str_upper = //得到整数位字符串
                        P_str_dbl.Split('.')[0];
                    P_str_lower = P_str_dbl.Split('.')[1];//得到小数位字符串
                    if (P_str_lower.Length > i)//判断数值位数是否大于保留小数位数
                    {
                        P_str_lower = P_str_lower.Substring(//截取保留的小数位
                            0, i);
                        return double.Parse(//返回double数值
                            P_str_upper + "." + P_str_lower);
                    }
                    else
                    {
                        return double.Parse(P_str_dbl);//如数值位数小于保留小数位数则直接返回
                    }
                }
                else
                {
                    return double.Parse(P_str_dbl);//如果没有小数位则直接返回值
                }
            }
    
            /// <summary>得到小数数值的方法
            /// 
            /// </summary>
            /// <param name="int_null">四舍五入保留的位数</param>
            /// <param name="length">四舍五入丢失的位数</param>
            /// <returns>返回小数值用于四舍五入计算</returns>
            internal double GetValue(int int_null, int length)
            {
                string P_str_dbl = "0.";//定义字符串变量并赋值
                for (int i = 0; i < length; i++)//使用for循环添加小数位
                {
                    if (i > int_null - 1)
                    {
                        P_str_dbl += "5";//向小数的四舍五入部分加5
                    }
                    else
                    {
                        P_str_dbl += "0";//向小数的保留部分加0
                    }
                }
                return double.Parse(P_str_dbl);//返回小数数值
            }

    2:数字金额的小写转大写

    小写金额需先做判断是否是int类型
    /// <summary>数字金额的小写转大写
            /// 
            /// </summary>
            /// <param name="x">小写金额</param>
            /// <returns>大写金额</returns>
            public string NumToChinese(string x)
            {
                //数字转换为中文后的数组
                string[] P_array_num = new string[] { "", "", "", "", "", "", "", "", "", "" };
                //为数字位数建立一个位数组
                string[] P_array_digit = new string[] { "", "", "", "" };
                //为数字单位建立一个单位数组
                string[] P_array_units = new string[] { "", "", "亿", "万亿" };
                string P_str_returnValue = ""; //返回值
                int finger = 0; //字符位置指针
                int P_int_m = x.Length % 4; //取模
                int P_int_k = 0;
                if (P_int_m > 0)
                    P_int_k = x.Length / 4 + 1;
                else
                    P_int_k = x.Length / 4;
                //外层循环,四位一组,每组最后加上单位: ",万亿,",",亿,",",万,"
                for (int i = P_int_k; i > 0; i--)
                {
                    int P_int_L = 4;
                    if (i == P_int_k && P_int_m != 0)
                        P_int_L = P_int_m;
                    //得到一组四位数
                    string four = x.Substring(finger, P_int_L);
                    int P_int_l = four.Length;
                    //内层循环在该组中的每一位数上循环
                    for (int j = 0; j < P_int_l; j++)
                    {
                        //处理组中的每一位数加上所在的位
                        int n = Convert.ToInt32(four.Substring(j, 1));
                        if (n == 0)
                        {
                            if (j < P_int_l - 1 && Convert.ToInt32(four.Substring(j + 1, 1)) > 0 && !P_str_returnValue.EndsWith(P_array_num[n]))
                                P_str_returnValue += P_array_num[n];
                        }
                        else
                        {
                            if (!(n == 1 && (P_str_returnValue.EndsWith(P_array_num[0]) | P_str_returnValue.Length == 0) && j == P_int_l - 2))
                                P_str_returnValue += P_array_num[n];
                            P_str_returnValue += P_array_digit[P_int_l - j - 1];
                        }
                    }
                    finger += P_int_L;
                    //每组最后加上一个单位:",万,",",亿," 等
                    if (i < P_int_k) //如果不是最高位的一组
                    {
                        if (Convert.ToInt32(four) != 0)
                            //如果所有4位不全是0则加上单位",万,",",亿,"等
                            P_str_returnValue += P_array_units[i - 1];
                    }
                    else
                    {
                        //处理最高位的一组,最后必须加上单位
                        P_str_returnValue += P_array_units[i - 1];
                    }
                }
                return P_str_returnValue;
            }

    3:设置货币的小数位数

    double P_dbl_value;//定义double类型变量
      if (double.TryParse(txt_input.Text, out P_dbl_value))//判断输入是否正确
     {
       NumberFormatInfo GN = //实例化NumberFormatInfo对象
       new CultureInfo("zh-CN", false).NumberFormat;
       GN.CurrencyDecimalDigits = Convert.ToInt32(cbox_select.Text);//设置保留位数
       txt_output.Text = P_dbl_value.ToString("C", GN);//将输入的小数转换为货币形式
    }
    else
     {
         MessageBox.Show("请输入正确的数值!", "提示!");//用户提示信息
     }

    4:进制转换

    class Transform
        {
            internal string TenToBinary(long value)//将十进制转换为二进制
            {
                return Convert.ToString(value, 2);
            }
            internal string TenToEight(long value)//将十进制转换为八进制
            {
                return Convert.ToString(value, 8);
            }
            internal string TenToSixteen(long value)//将十进制转换为十六进制
            {
                return Convert.ToString(value, 16);
            }
            internal string BinaryToEight(long value)//将二进制转换为八进制
            {
                return Convert.ToString(
                    Convert.ToInt64(value.ToString(), 2), 8);
            }
            internal string BinaryToTen(long value)//将二进制转换为十进制
            {
                return Convert.ToInt64(
                    value.ToString(), 2).ToString();
            }
            internal string BinaryToSixteen(long value)//将二进制转换为十六进制
            {
                return Convert.ToString(
                    Convert.ToInt64(value.ToString(), 2), 16);
            }
            internal string EightToBinary(long value)//将八进制转换为二进制
            {
                return Convert.ToString(
                    Convert.ToInt64(value.ToString(), 8), 2);
            }
            internal string EightToTen(long value)//将八进制转换为十进制
            {
                return Convert.ToInt64(
                    value.ToString(), 8).ToString();
            }
            internal string EightToSixteen(long value)//将八进制转换为十六进制
            {
                return Convert.ToString(
                    Convert.ToInt64(value.ToString(), 8), 16);
            }
            internal string SixteenToBinary(string value)//将十六进制转换为二进制
            {
                return Convert.ToString(
                    Convert.ToInt64(value, 16), 2);
            }
            internal string SixteenToEight(string value)//将十六进制转换为八进制
            {
                return Convert.ToString(
                    Convert.ToInt64(value, 16), 8);
            }
            internal string SixteenToTen(string value)//将十六进制转换为十进制
            {
                return Convert.ToUInt64(value, 16).ToString();
            }
        }
  • 相关阅读:
    领料单取整
    财务应付金额对不上的
    销售订单计算交期
    辅助单位启用
    K3CLOUD日志目录
    QLIKVIEW-日期格式,数字格式写法
    MRP运算报错-清除预留
    整单折扣后 财务、暂估应付价税合计对不上的问题处理
    BZOJ 2976: [Poi2002]出圈游戏 Excrt+set
    BZOJ 3060: [Poi2012]Tour de Byteotia 并查集
  • 原文地址:https://www.cnblogs.com/happyqiang/p/5494940.html
Copyright © 2020-2023  润新知