【美高梅开户网址】js达成金额格式化,金额转换到中文大写金额

2018-08-24 转别人

asp.net+js完结金额格式化,asp.netjs落成金额

基于用户须要,在输入金额时要格式化,即每3位数字加逗号分隔,并保存两位小数。

怀念到用户的感受,随使用JS对金额进行格式化,前台代码如下:

复制代码 代码如下:

<asp:TextBox ID=”txtAmount” runat=”server” onkeypress=”check()”
onkeyup=”run(this)”></asp:TextBox>

JS代码如下:

复制代码 代码如下:

//======检查输入的是还是不是为数字
function check() {
    if (!((window.event.keyCode >= 48 && window.event.keyCode <=
57) || window.event.keyCode == 46 || window.event.keyCode == 45)) {
        window.event.keyCode = 0
    }
}
//======格式化文本框的金额
function run(obj) {
    var objvalue = obj.value.replace(/[,]/g, “”),
        objlength = objvalue.length,
        dtmp = objvalue.indexOf(“.”),
        neg = objvalue.indexOf(“-“);
    var inttmp = 0,
        floattmp = -1;
    if (dtmp != -1) {
        inttmp = dtmp == 0 ? “0” : new String(objvalue).substring(0,
dtmp);
        floattmp = new String(objvalue).substring(dtmp + 1, objlength +
1);
        floattmp = floattmp.replace(/[^0-9]/g, “”);
    }
    else {
        inttmp = objvalue;
    }
    if (neg == 0) {
        inttmp = inttmp.replace(/[-]/g, “”);
    }
    inttmp = inttmp.replace(/[^0-9]/g, “”);
    var tmp = “”, str = “0000”;
美高梅开户网址,    for (; inttmp.length > 3; ) {
        var temp = new String(inttmp / 1000);
        if (temp.indexOf(“.”) == -1) {
【美高梅开户网址】js达成金额格式化,金额转换到中文大写金额。            tmp = “,000” + tmp;
            inttmp = temp;
        }
        else {
            var le = new String(temp).split(“.”)[1].length;
            tmp = “,” + new String(temp).split(“.”)[1] +
str.substring(0, 3 – le) + tmp;
            inttmp = new String(temp).split(“.”)[0];
        }
    }
    inttmp = inttmp + tmp;
    obj.value = neg == 0 ? “-” + inttmp + runing(floattmp) : inttmp +
runing(floattmp);
}
//======整理小数部分
function runing(val) {
    if (val != “-1” && val != “”) {
        var valvalue = 0 + “.” + val;
        if (val.length >= 2) {
            valvalue = parseFloat(valvalue).toFixed(2);
        }
        var temp = “.” + valvalue.split(“.”)[1];
        return temp;
    }
    else if (val != “0” && val == “”) {
        return “.”;
    }
    else {
        return “”;
    }
}

再者因为金额可输入负数,所以加上“neg = objvalue.indexOf(“-“)”的论断。

至于金额的格式化难点,平常遇上那种工作,觉得那几个还能,也就留着,以供之后翻看方便!

依据用户供给,在输入金额时要格式化,即每几个人数字加逗号分隔,并保存两位小数。
考虑到用…

艾德itText金额输入(限制输入金额大小和小数点后两位)

标签(空格分隔): Android开发


诸如:¥十1一→一千零一拾1元整。大写数字为:零、1、2、3、四、五、陆、7、八、玖、10、佰、仟、万、亿

c#金额转换来中文大写金额

   /// <summary>
        /// 金额转换成中文大写金额
        /// </summary>
        /// <param name="LowerMoney">eg:10.74</param>
        /// <returns></returns>
        public static string MoneyToUpper(string LowerMoney)
        {
            string functionReturnValue = null;
            bool IsNegative = false; // 是否是负数
            if (LowerMoney.Trim().Substring(0, 1) == "-")
            {
                // 是负数则先转为正数
                LowerMoney = LowerMoney.Trim().Remove(0, 1);
                IsNegative = true;
            }
            string strLower = null;
            string strUpart = null;
            string strUpper = null;
            int iTemp = 0;
            // 保留两位小数 123.489→123.49  123.4→123.4
            LowerMoney = Math.Round(double.Parse(LowerMoney), 2).ToString();
            if (LowerMoney.IndexOf(".") > 0)
            {
                if (LowerMoney.IndexOf(".") == LowerMoney.Length - 2)
                {
                    LowerMoney = LowerMoney + "0";
                }
            }
            else
            {
                LowerMoney = LowerMoney + ".00";
            }
            strLower = LowerMoney;
            iTemp = 1;
            strUpper = "";
            while (iTemp <= strLower.Length)
            {
                switch (strLower.Substring(strLower.Length - iTemp, 1))
                {
                    case ".":
                        strUpart = "圆";
                        break;
                    case "0":
                        strUpart = "零";
                        break;
                    case "1":
                        strUpart = "壹";
                        break;
                    case "2":
                        strUpart = "贰";
                        break;
                    case "3":
                        strUpart = "叁";
                        break;
                    case "4":
                        strUpart = "肆";
                        break;
                    case "5":
                        strUpart = "伍";
                        break;
                    case "6":
                        strUpart = "陆";
                        break;
                    case "7":
                        strUpart = "柒";
                        break;
                    case "8":
                        strUpart = "捌";
                        break;
                    case "9":
                        strUpart = "玖";
                        break;
                }

                switch (iTemp)
                {
                    case 1:
                        strUpart = strUpart + "分";
                        break;
                    case 2:
                        strUpart = strUpart + "角";
                        break;
                    case 3:
                        strUpart = strUpart + "";
                        break;
                    case 4:
                        strUpart = strUpart + "";
                        break;
                    case 5:
                        strUpart = strUpart + "拾";
                        break;
                    case 6:
                        strUpart = strUpart + "佰";
                        break;
                    case 7:
                        strUpart = strUpart + "仟";
                        break;
                    case 8:
                        strUpart = strUpart + "万";
                        break;
                    case 9:
                        strUpart = strUpart + "拾";
                        break;
                    case 10:
                        strUpart = strUpart + "佰";
                        break;
                    case 11:
                        strUpart = strUpart + "仟";
                        break;
                    case 12:
                        strUpart = strUpart + "亿";
                        break;
                    case 13:
                        strUpart = strUpart + "拾";
                        break;
                    case 14:
                        strUpart = strUpart + "佰";
                        break;
                    case 15:
                        strUpart = strUpart + "仟";
                        break;
                    case 16:
                        strUpart = strUpart + "万";
                        break;
                    default:
                        strUpart = strUpart + "";
                        break;
                }

                strUpper = strUpart + strUpper;
                iTemp = iTemp + 1;
            }

            strUpper = strUpper.Replace("零拾", "零");
            strUpper = strUpper.Replace("零佰", "零");
            strUpper = strUpper.Replace("零仟", "零");
            strUpper = strUpper.Replace("零零零", "零");
            strUpper = strUpper.Replace("零零", "零");
            strUpper = strUpper.Replace("零角零分", "整");
            strUpper = strUpper.Replace("零分", "整");
            strUpper = strUpper.Replace("零角", "零");
            strUpper = strUpper.Replace("零亿零万零圆", "亿圆");
            strUpper = strUpper.Replace("亿零万零圆", "亿圆");
            strUpper = strUpper.Replace("零亿零万", "亿");
            strUpper = strUpper.Replace("零万零圆", "万圆");
            strUpper = strUpper.Replace("零亿", "亿");
            strUpper = strUpper.Replace("零万", "万");
            strUpper = strUpper.Replace("零圆", "圆");
            strUpper = strUpper.Replace("零零", "零");

            // 对壹圆以下的金额的处理
            if (strUpper.Substring(0, 1) == "圆")
            {
                strUpper = strUpper.Substring(1, strUpper.Length - 1);
            }
            if (strUpper.Substring(0, 1) == "零")
            {
                strUpper = strUpper.Substring(1, strUpper.Length - 1);
            }
            if (strUpper.Substring(0, 1) == "角")
            {
                strUpper = strUpper.Substring(1, strUpper.Length - 1);
            }
            if (strUpper.Substring(0, 1) == "分")
            {
                strUpper = strUpper.Substring(1, strUpper.Length - 1);
            }
            if (strUpper.Substring(0, 1) == "整")
            {
                strUpper = "零圆整";
            }
            functionReturnValue = strUpper;

            if (IsNegative == true)
            {
                return "负" + functionReturnValue;
            }
            else
            {
                return functionReturnValue;
            }
        }

 

decimal PriceSum = 32957.2654;

调用  var PriceSumChinese = MoneyToUpper(PriceSum.ToString());

结果:两万3000九佰伍拾七圆二角八分

 

正则方法

/// <summary>
/// 人民币大写转换
/// </summary>
/// <param name="number">数字</param>
/// <returns>返回人民币大写,如:壹元整</returns>
public static string ConvertToChinese(decimal number)
{
    var s = number.ToString("#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A");
    var d = Regex.Replace(s, @"((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\.]|$))))", "${b}${z}");
    var r = Regex.Replace(d, ".", m => "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟万亿兆京垓秭穰"[m.Value[0] - '-'].ToString());
    return r;
}

 

Android中央控制制艾德itText输入内容、长度的主意有两种

  • 方案一:

    • 经过监听艾德itText的addTextChangedListener方法
  • 方案2:通过setFilter()方法设置过滤器

    • 约等于自定义3个类实现InputFilter接口,复写filter那几个格局在内部举行相关逻辑
  • 方案三:通过布局文件中,控件的品质来支配

    • 例如 maxLength、inputType、minLength等

import java.io.*;

需求

近期在开发app的时候,收到了这么的需要,也等于打赏金额,用户能够自定义金额,并且供给用户输入的金额无法压倒500并且限制小数点后两位小数,相当于最多输入499.9玖元。那么那几个只好协调自定义了。可以见到,这一个需求以上的三种方式,第二种并不可能达到那样的逻辑须要,临时解除,也正是唯有方案一和方案2了.
关于google为何有诸如此类的二种艺术控制艾德itText相关操作,可以查看这些InputFilter详解、TextWatcher详解
所以接下去能够付出最后的一个贯彻方案,那便是落到实处InputFilter接口重写filter那几个点子来促成上述供给。

import java.lang.String;

提交方案

在方案代码初步在此之前,我们供给先精晓一下filter方法的次第参数的意思:

CharSequence filter (CharSequence source, 
                int start, 
                int end, 
                Spanned dest, 
                int dstart, 
                int dend)

参数简介

  • source 新输入的字符串
  • start 新输入的字符串起先下标,一般为0
  • end 新输入的字符串终点下标,1般为source长度-一
  • dest 输入此前文本的始末
  • dstart 原内容发轫坐标 1般为0
  • dend 原内容终点坐标,1般为dest长度-一

能够看来我们得以获取到原来输入的字符串,还有大家即将输入的字符串,然后关于光标所在的职分(能够的出来的),而且我们还是能够获得原字符串和将要输入字符串的初步坐标,那么大家就来搞工作呢。废话不多说,直接上代码

/**
 * Created by ruolanmingyue on 2017/10/26.
 *
 * @function 用于过滤输入      防止输入大于500元还有就是限制小数点之后两位
 */

public class EditInputFilter implements InputFilter {

    /**
     * 最大数字
     */
    public static final int MAX_VALUE = 500;

    /**
     * 小数点后的数字的位数
     */
    public static final int POINTER_LENGTH = 2;

    private static final String POINTER = ".";

    Pattern p;

    public EditInputFilter() {
        //用于匹配输入的是0-9  .  这几个数字和字符
        p = Pattern.compile("([0-9]|\\.)*");
    }

    /**
     * source    新输入的字符串
     * start    新输入的字符串起始下标,一般为0
     * end    新输入的字符串终点下标,一般为source长度-1
     * dest    输入之前文本框内容
     * dstart    原内容起始坐标,一般为0
     * dend    原内容终点坐标,一般为dest长度-1
     */

    @Override
    public CharSequence filter(CharSequence source, int start, int end,
                               Spanned dest, int dstart, int dend) {

        String sourceText = source.toString();
        String destText = dest.toString();
//验证删除等按键
        if (TextUtils.isEmpty(sourceText)) {
            if (dstart == 0 && destText.indexOf(POINTER) == 1) {//保证小数点不在第一个位置
                return "0";
            }
            return "";
        }
        Matcher matcher = p.matcher(source);
        //已经输入小数点的情况下,只能输入数字
        if (destText.contains(POINTER)) {
            if (!matcher.matches()) {
                return "";
            } else {
                if (POINTER.equals(source)) { //只能输入一个小数点
                    return "";
                }
            }
            //验证小数点精度,保证小数点后只能输入两位
            int index = destText.indexOf(POINTER);
            int length = destText.trim().length() - index;
            if (length > POINTER_LENGTH && dstart > index) {
                return "";
            }
        } else {
            //没有输入小数点的情况下,只能输入小数点和数字,但首位不能输入小数点和0
            if (!matcher.matches()) {
                return "";
            } else {
                if ((POINTER.equals(source)) && dstart == 0) {//第一个位置输入小数点的情况
                    return "0.";
                } else if ("0".equals(source) && dstart == 0) {
                    return "";
                }
            }
        }
//        dstart
        //修复当光标定位到第一位的时候 还能输入其他的    这个是为了修复以下的情况
        /**
         * <>
         *     当如下情况的时候  也就是 已经输入了23.45   这个时候限制是500元
         *     那么这个时候如果把光标移动2前面  也就是第0位  在输入一个5  那么这个实际的参与下面的
         *     判断的sumText > MAX_VALUE  是23.455  这个是不大于 500的   但是实际情况是523  这个时候
         *     已经大于500了  所以之前的是存在bug的   这个要进行修正 也就是拿到的比较数应该是523.45  而不是23.455
         *     所以有了下面的分隔  也就是  把23.45  (因为这个时候dstart=0)  分隔成 ""  和23.45  然后把  5放到中间
         *     进行拼接 也就是  "" + 5 + 23.45  也就是523.45  然后在进行和500比较
         *     还有一个比较明显的就是   23.45   这个时候光标在2和3 之间  那么如果修正之前  是23.455   修正之后  dstart = 1
         *     这个时候分隔是 "2"  "3.45"   这个时候拼接是253.45  然后和500比较  以此类推
         * </>
         */
        String first = destText.substring(0,dstart);

        String second = destText.substring(dstart,destText.length());
//        dend
        String sum = first + sourceText + second;
        //验证输入金额的大小
        double sumText = Double.parseDouble(sum);
        //这里得到输入完之后需要计算的金额  如果这个金额大于了事先设定的金额,那么久直接返回  不需要加入输入的字符
        if (sumText > MAX_VALUE) {
        //
            Toast.makeText(MyApp.getContext(), MyApp.getContext().getResources().getString(R.string.appreciate_input), Toast.LENGTH_SHORT).show();
            return dest.subSequence(dstart, dend);
        }
        //如果输入的金额小于事先规定的金额
        return dest.subSequence(dstart, dend) + sourceText;
    }
}

public class change

行使办法

 EditText editText = new EditText(getContext());

        InputFilter[] filters = {new EditInputFilter()};

        editText.setFilters(filters);

{

参考文档

  • Android达成艾德itText输入金额
    • 然则这一个稿子写的有bug,发现的bug如下多个
      • 1、输入金额之后,当手动改edittext里面的光标的时候,比如刚早先输入的是23.2二元,这一年把光标移动到二和3之间,那么大家还足以输入22贰三.2二元,也便是不切合不能超出500元需求,那个在上头的表达中有详实的辨证
      • 贰、当改动光标在.后边的时候,也是足以说入数字的,也正是不合乎输入数字限制两位小数须求

public static void main(String agrs[])

{

 //Money用于存放输入的金额数

 long Money=0;

 String Mon[]={“零”,”壹”,”贰”,”叁”,”肆”,”伍”,”陆”,”柒”,”捌”,”玖”};

        String
Mon1[]={“拾”,”佰”,”仟”,”万”,”拾万”,”百万”,”仟万”,”亿”,”拾亿”,”百亿”,”仟亿”},

        je[]=new
String[30];//je[]数组用于存放数字金额被更换后的数字

        //n用于测试你是否有金额转换

        int n=agrs.length;

        if(n==0)

        System.out.println(“请输入必要转移的金额:”);

           //将输入的金额转化成long型的数据

        else

         {

           Money=Long.parseLong(agrs[n-1]);

}

//bitt用于存放第几个需更换的金额数字,

int bitt=0,j,k=-1,i=0;

//转换进度

while(Money!=0)

{

bitt=(int)(Money%10L);

//总括出每一个数字对应的大写值

for(j=0;j

{

if(j==bitt)break;

}

//将相应的值存入je[]中

if(k!=-1){je[i]=Mon1[k];i++;}

je[i]=Mon[j];i++;

Money=Money/10;

k++;

if(Money==0)

{

//输出转换后的金额

System.out.print(“您输入的金额为:”);

i–;

for(;i>=0;i–)

System.out.print(je[i]);

}

}

}

}

         

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图