进入我的主页,查看更多JS的分享!
我的代码有多短,本篇内容就有多短!
先实现标题的内容,贴出代码:
//格式化金额的输入function formatPrice(p) { if (!p) { return "0.0"; } else { p += ""; //去除非数字,只保留数字和. p = p.replace(/[^d.]/g, ""); //必须保证第一个为数字而不是. p = p.replace(/^./g, "0."); // 保留第一个. p = p.replace(".", "$#$").replace(/./g, "").replace("$#$", "."); // 保留第一个. // p = p.replace(/.{2,}/g, "."); //只取一位小数 不进位,{1}表示保留1位小数 p = p.replace(/^(-)*(d+).(d{1}).*$/, "$1$2.$3"); // 返回时 处理0199、0.这种情况 return parseFloat(p); }}
测试效果:
console.log(formatPrice("哈哈10.嘿嘿5.99.589"));//输出:10.5console.log(formatPrice("哈哈.嘿嘿5.99.589"));//输出:0.5
补充:
//只保留一位小数,{0,2}表示保留两位p = Number(p.toString().match(/^d+(?:.d{0,1})?/));//保留一位小数,且小数位四舍五入p = parseFloat(p).toFixed(1);
如果你用了其它方法来实现,其中不建议进行乘法除法的运算,因为js的加减乘除,在带小数时可能会丢失精度(虽然有解决办法,但放在这里就麻烦了)。
然后就没有然后了,欢迎补充。
![8d2e636cbd91bfcbab62c691d9a0ba50.gif](https://i-blog.csdnimg.cn/blog_migrate/5065990d485f85d878bd11669c65fd33.gif)