带逗号和两位小数的数值格式

Posted

技术标签:

【中文标题】带逗号和两位小数的数值格式【英文标题】:Number value format with comma and two decimal points 【发布时间】:2018-09-02 23:30:29 【问题描述】:

我正在使用 chart.js 来显示我的销售额,问题是我无法将数据正确转换为带有逗号和两位小数的数字格式。

当数据为整数时,输出正确。但是,当我显示平均销售额时,我得到的输出类似于

平均销售额(无格式)1000.2017 平均销售额(含格式)1,000.2,017 总销售额(无格式)1000 总销售额(含格式)1,000

如何在javascript中正确格式化输出?

tooltips: 
  callbacks: 
     label: function(tooltipItem, data) 
         var value = data.datasets[0].data[tooltipItem.index];
         value = value.toString();
         value = value.replace(/\B(?=(\d3)+(?!\d))/g, ",");
              return value;
           
       
  ,
   scales: 
     yAxes: [
       ticks: 
         userCallback: function(value, index, values) 
           value = value.toString();
           value = value.replace(/\B(?=(\d3)+(?!\d))/g, ",");
              return value;
         
        
    ]

【问题讨论】:

“1000.2017”是一个数字还是两个数字? “平均销售额(含格式)1,000.2,017”真的是您想要的吗?这不是有效的数字格式。 不,那是我要修复格式的代码输出 【参考方案1】:

Javascript 为您提供了一些解决方案来做到这一点。下面首先想到两个。

1. number.toLocaleString

如前所述,.toLocaleString 可以帮助您,但不要使用minimumFractionDigits,而是使用maximumFractionDigits

如下:

number.toLocaleString(undefined,  maximumFractionDigits: 2 )

总结一下:

const decimalsFormated = number.toLocaleString(undefined,  maximumFractionDigits: 2 )

然后

const finalFormated = String(decimalsFormated).replace(/\B(?=(\d3)+(?!\d))/g, ",");

2。 Number.parseFloat + toFixed

let number = 123.1234
Number.parseFloat(number).toFixed(2);

在每种方法中,最好将您的解决方案包装在函数中:

function getCommaSeparatedTwoDecimalsNumber(number) 
    const fixedNumber = Number.parseFloat(number).toFixed(2);
    return String(fixedNumber).replace(/\B(?=(\d3)+(?!\d))/g, ",");


您也可以使用正则表达式。不过我想说这太复杂了。

另外非常重要的一点需要注意的是,您可能希望也可能不希望对最终结果进行四舍五入。

toLocaleString 与 maxDigits 一起使用只会删除这两个数字之后的所有内容。 使用 toFixed 会使您的输出不正确地四舍五入。

此解决方案将正确舍入:

Number(Math.round(1.005+'e2')+'e-2').toFixed(2);

从这里粘贴: Format number to always show 2 decimal places

最后一件事,可能是最重要的。 根据输入数字的格式,上述解决方案可能有效,也可能无效。您需要决定输入格式,如果无法预见,请为每种可能性提供格式器:

1000000.123124

10000123123

100000,1239

1.12039

1,19012

等等

根据格式,您需要执行的操作顺序可能会有所不同。

【讨论】:

Number.parseFloat(number).toFixed(2).replace(/[.]/, ","));正在工作,但没有逗号 我需要一个逗号和小数点,例如 1,000.00 只是为了清楚 Number.parseFloat(number).toFixed(2).replace(/[.]/, ",")) 的输出;是 1000.00 我需要的是 1,000.00 其实不是,因为.replace(/[.]/, ","));会用逗号代替点。一开始我误会你了。我的答案现在可以了吗?【参考方案2】:

您可以尝试像这样使用 toLocaleString:

value = value.toLocaleString(undefined,  maximumFractionDigits: 2 );

它将根据您的区域设置格式化数字,用千位分隔符和逗号后的 2 位数字。

【讨论】:

您使用的是什么浏览器,并非所有浏览器都支持带参数的 toLocaleString(Edge 支持)。 我正在使用 chrome 它不会起作用,因为在这个答案中 minimum 应该替换为 maximum 请点赞我的评论和/或回答,因为它有帮助:)【参考方案3】:

你在找什么:

逗号 小数点后两位。

这是你的功能:

function get4DecimalPointsWithCommas(amount) 
    return amount.toLocaleString(undefined,  maximumFractionDigits: 4, minimumFractionDicits: 4 );

【讨论】:

以上是关于带逗号和两位小数的数值格式的主要内容,如果未能解决你的问题,请参考以下文章

尝试返回带两位小数和逗号的值

如何让excel饼图的百分比带两位小数

正则校验输入数值在0~100,保留两位小数

为啥EXCEL粘贴为数值后小数点后面数字就没有了?

C# 怎样把 数字型的字符串 格式化成 两位小数形式的字符串?不足两位小数要补0

怎么保留一位小数?