带有 4 位小数的货币格式正则表达式,如果没有则不显示美分

Posted

技术标签:

【中文标题】带有 4 位小数的货币格式正则表达式,如果没有则不显示美分【英文标题】:Currency format regex with 4 decimals that does not show cents if there aren't any 【发布时间】:2020-06-12 18:27:03 【问题描述】:

我正在使用这个正则表达式 here,但有 4 个小数,所以

val.toFixed(4).replace(/\d(?=(\d3)+\.)/g, '$&,');

但希望进行以下更改。

如果小数为 0,例如 9.0000,则显示 9

如果只有 1 或 2 位小数,则显示 2 位小数

9.5000,显示 9.50

否则显示 4 位小数

有没有办法做到这一点?谢谢

【问题讨论】:

嗨,为什么不使用Math.fround,然后在需要时添加额外的0? @Yanis-git 在哪种情况下? 【参考方案1】:

你可以这样做:

已编辑用户评论:

var val= "9.5493";
if (val.indexOf(".0000")>=0) 
var val = val.replace(".0000", "");

if (val.indexOf(".00")>=0) 
var val = val.replace(".00", "");


var res = val.split(".");
var1=res[0];
var2=res[1];

if (var2 && var2.indexOf("000")>=0) 
var res = var2.replace("000", "0");
var val = var1+"."+res;
else
var val = val;
;


console.log(val);

var val= "9.0000";
if (val.indexOf(".0000")>=0) 
var val = val.replace(".0000", "");

if (val.indexOf(".00")>=0) 
var val = val.replace(".00", "");


var res = val.split(".");
var1=res[0];
var2=res[1];

if (var2 && var2.indexOf("000")>=0) 
var res = var2.replace("000", "0");
var val = var1+"."+res;
else
var val = val;
;


console.log(val);

var val= "90000";
if (val.indexOf(".0000")>=0) 
var val = val.replace(".0000", "");

if (val.indexOf(".00")>=0) 
var val = val.replace(".00", "");


var res = val.split(".");
var1=res[0];
var2=res[1];

if (var2 && var2.indexOf("000")>=0) 
var res = var2.replace("000", "0");
var val = var1+"."+res;
else
var val = val;
;


console.log(val);

var val= "9.5000";
if (val.indexOf(".0000")>=0) 
var val = val.replace(".0000", "");

if (val.indexOf(".00")>=0) 
var val = val.replace(".00", "");


var res = val.split(".");
var1=res[0];
var2=res[1];

if (var2 && var2.indexOf("000")>=0) 
var res = var2.replace("000", "0");
var val = var1+"."+res;
else
var val = val;
;



console.log(val);

【讨论】:

我想你错过了一个点 val.replace("000", "0");应该是 val.replace(".000", "0"); @user3808307 不,那条线会将您的 9.5000 案例四舍五入到 9.50,或任何其他尾随 000 的行,其中没有点。 “9.5000,显示 9.50”,如果你有这样的情况,你可以再添加一个。你没有在你的问题中提到这一点。 那么它是错误的,因为它会将 90000000 转换为 900000 @user3808307 你是对的,那条线需要一点工作。让我检查一下。 @user3808307 已编辑,检查。我认为所有内容都涵盖了。

以上是关于带有 4 位小数的货币格式正则表达式,如果没有则不显示美分的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 正则表达式,用于带有一个点和 2 个小数的正数

格式化货币 - Swift

Js正则表达式 校验最多4位小数

如何使用 TextWatcher Android 将 3 位小数货币格式添加到edittext

正则表达式 验证数字格式 非负数 小数点后保留两位 数字正则 double正则

正则表达式用于小数点前 6 位和小数点后 2 位