happyqiang

博客园 首页 新随笔 联系 订阅 管理
 
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();
        }
    }
posted on 2016-05-15 11:47  妙堂传奇  阅读(790)  评论(0编辑  收藏  举报