如何在Javascript中找到当前语言环境的十进制分隔符
在我的应用程序中,有几个地方需要用户输入货币值。该应用程序支持以多种货币存储这些货币值,并支持本地化 我正在使用Javascript中的对象将数字格式化为我需要的任何货币和语言环境,但是没有办法使用它来取消数字的格式化 到目前为止,我发现的所有库都要求您提供十进制和千位分隔符,以便格式化/取消格式化功能正常工作。然而,我需要一种方法来找到小数点和千位分隔符在第一位的位置,这样我就不能使用它们了如何在Javascript中找到当前语言环境的十进制分隔符,javascript,Javascript,在我的应用程序中,有几个地方需要用户输入货币值。该应用程序支持以多种货币存储这些货币值,并支持本地化 我正在使用Javascript中的对象将数字格式化为我需要的任何货币和语言环境,但是没有办法使用它来取消数字的格式化 到目前为止,我发现的所有库都要求您提供十进制和千位分隔符,以便格式化/取消格式化功能正常工作。然而,我需要一种方法来找到小数点和千位分隔符在第一位的位置,这样我就不能使用它们了 如何可靠地获取当前区域设置的十进制分隔符?选项1:使用Intl.NumberFormat#format
如何可靠地获取当前区域设置的十进制分隔符?选项1:使用
Intl.NumberFormat#formatParts
最可靠的方法,仅适用于。否则,它需要一个
选项2:使用toLocaleString
不那么优雅,它依赖于分隔符总是一个字符长的事实,这似乎适用于所有语言:
这里有人建议:
示例:
> getDecimalSeparator()
"."
> getDecimalSeparator('fr-FR')
","
选项1的奖金:
> getDecimalSeparator()
"."
> getDecimalSeparator('fr-FR')
","
我们可以扩展它来检索给定区域设置的十进制或组分隔符:
function getSeparator(locale, separatorType) {
const numberWithGroupAndDecimalSeparator = 1000.1;
return Intl.NumberFormat(locale)
.formatToParts(numberWithGroupAndDecimalSeparator)
.find(part => part.type === separatorType)
.value;
}
示例:
> getSeparator('en-US', 'decimal')
"."
> getSeparator('en-US', 'group')
","
> getSeparator('fr-FR', 'decimal')
","
> getSeparator('fr-FR', 'group')
" "
下面是一个可以做到这一点的例子。我已经将这个问题改写为不太基于意见的问题,希望能更清楚地说明我正在努力实现的目标。accounting.js库确实很好,但它仍然要求我知道区域设置的分隔符是什么,我不知道如何做到这一点。这段代码对我几乎奏效,但如果我使用示例中的数字1000.1,它将找不到组分隔符。当我使用10000.1时,它起作用了。
> getSeparator('en-US', 'decimal')
"."
> getSeparator('en-US', 'group')
","
> getSeparator('fr-FR', 'decimal')
","
> getSeparator('fr-FR', 'group')
" "