计算的最终结果应该显示格式为$999.99的价格-最大值

 

写个简单一些的,你参考一下。

function format(str) {
	if (/^\$?(\d+)(?:\.(\d{1,2}))?$/.test(str)) {
		var m = RegExp.$1; //整数部分
		var p = RegExp.$2; //小数部分
		if (p.length==0 && m.length>3) { //没有小数,整数部分超过3位移动小数点,99999 -> 999.99
			p = m.slice(3);
			m = m.slice(0,3);
		}
		if (m.length > 3 || p.length > 2) //整数部分超过3位  小数部分超过2位
			return 'error';
		return "$"+m+"."+(p+"00").slice(0,2); 
	} else 
		return 'error';
}


var a = ["$999.99","$99.99","$9.9","$9","9999999","999999","99999"];
a.forEach(function(v, i){
console.log(v ,"-->", format(v) );
});

提供思路 :首先判断字符串长度>7 直接报错,然后把字符串拆分成一个个字符,假如每个字符不在有效字符内 也报错,合法字符后,先转成两位小数 之后判断有没有越界


    function getPrice(v) {
        if (!/[\d\.\$]/.test(v)) return 'error';//输入字符不在可用字符集内直接返回error
        if (!/^\$?\d+(\.\d+)?$/.test(v)) return 'error';//格式错误
        if (v.length > 7) return 'error';
        v = v.replace(/\$/g, '');
        var arr = v.split('.');
        var num
        if (arr.length == 1) {
            num = parseInt(v);
            if (num < 1000) return '$' + num.toFixed(2);
            else {
                num = parseInt(v.substring(0, v.length - 2));
                if (num > 999) return 'error';
                return '$' + parseFloat(arr[0] + '.' + v.substring(v.length - 2)).toFixed(2);
            }
        }
        else {
            if (parseInt(arr[0]) > 999) return 'error';
            return '$' + arr[0] + '.' + (arr[1].length < 2 ? arr[1] + '0' : arr[1].substring(0, 2));
        }
    }

 

 

 const inputStr = document.querySelector('input')
        document.querySelector('#demo').innerHTML = inputStr.value
        function myFunction() {
            // 如果输入长度大于7直接return error
            if (inputStr.value.length <= 7) {
                let reg = /^[0-9\$\.]{1,7}$/;
                // 判断字符是否合法
                if (reg.test(inputStr.value)) {
                    // 不存在$,转换为Number类型,用toFixed(2)返回两位小数的字符串
                    if (inputStr.value.indexOf('$') == -1) {
                        const toNum = parseFloat(inputStr.value).toFixed(2)
                        console.log(toNum.length);

                        // 少了$,只有6位
                        if(toNum.length <= 6){
                            // 添加$
                        return document.querySelector('#demo').innerHTML = '$' + toNum
                        console.log(toNum);
                        }
                        

                        // 存在$在第一位,用slice把除了第一位$,剩下截取
                    } else if (inputStr.value.indexOf('$') == 0) {
                        const toNum1 = parseFloat(inputStr.value.slice(1, inputStr.value.length)).toFixed(2);
                        console.log(toNum1);

                        // 少了$,只有6位
                       if(toNum1.length <= 6){
                        return document.querySelector('#demo').innerHTML = '$' + toNum1
                        console.log(toNum1);
                       }
                    }
                    // return document.querySelector('#demo').innerHTML = "error"
                }
            }
            return document.querySelector('#demo').innerHTML = "error"
        }

我也写出来了

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632

非常感谢您使用有问必答服务,为了后续更快速的帮您解决问题,现诚邀您参与有问必答体验反馈。您的建议将会运用到我们的产品优化中,希望能得到您的支持与协助!

速戳参与调研>>>https://t.csdnimg.cn/Kf0y