如何在Javascript中找到当前语言环境的十进制分隔符

如何在Javascript中找到当前语言环境的十进制分隔符,javascript,Javascript,在我的应用程序中,有几个地方需要用户输入货币值。该应用程序支持以多种货币存储这些货币值,并支持本地化 我正在使用Javascript中的对象将数字格式化为我需要的任何货币和语言环境,但是没有办法使用它来取消数字的格式化 到目前为止,我发现的所有库都要求您提供十进制和千位分隔符,以便格式化/取消格式化功能正常工作。然而,我需要一种方法来找到小数点和千位分隔符在第一位的位置,这样我就不能使用它们了 如何可靠地获取当前区域设置的十进制分隔符?选项1:使用Intl.NumberFormat#format

在我的应用程序中,有几个地方需要用户输入货币值。该应用程序支持以多种货币存储这些货币值,并支持本地化

我正在使用Javascript中的对象将数字格式化为我需要的任何货币和语言环境,但是没有办法使用它来取消数字的格式化

到目前为止,我发现的所有库都要求您提供十进制和千位分隔符,以便格式化/取消格式化功能正常工作。然而,我需要一种方法来找到小数点和千位分隔符在第一位的位置,这样我就不能使用它们了


如何可靠地获取当前区域设置的十进制分隔符?

选项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')
" "