gpt4 book ai didi

javascript - 有没有办法在基于区域设置格式化货币时获得一致的输出

转载 作者:行者123 更新时间:2023-11-29 22:51:01 25 4
gpt4 key购买 nike

我们正在根据区域设置格式化数值,但我们发现当我们用不同的编程语言生成它时生成的输出是不同的。而且我也不确定哪个输出是正确的。

在Java中:

//https://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html
import java.text.NumberFormat

double money = 987654.32
NumberFormat formatter = NumberFormat.getCurrencyInstance(new Locale("ar", "DZ"))
System.out.println(formatter.format(money))
formatter = NumberFormat.getCurrencyInstance(new Locale("bg", "BG"))
System.out.println(formatter.format(money))

输出:

د.ج.‏ 987,654.32
лв.987 654,32

在 JavaScript 中:

//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat
var number = 987654.32;
console.log(new Intl.NumberFormat('ar-DZ', { style: 'currency', currency: 'DZD' }).format(number));
console.log(new Intl.NumberFormat('bg-BG', { style: 'currency', currency: 'BGN' }).format(number));

输出:

د.ج.‏ 987.654,32
987654,32 лв.

在 C# 中:

var amount = 987654.32M;
var cultureInfo = CultureInfo.GetCultureInfo("ar-DZ");
var formattedAmount = String.Format(cultureInfo, "{0:C}", amount);
Console.WriteLine(formattedAmount);

cultureInfo = CultureInfo.GetCultureInfo("bg-BG");
formattedAmount = String.Format(cultureInfo, "{0:C}", amount);
Console.WriteLine(formattedAmount);

输出:

د.ج.‏ 987,654.32
987 654,32 лв.

如您所见,千位分隔符以及货币符号的位置也有所不同。有没有一种方法可以解决差异,或者您是否知道比这些解决方案更值得信赖的更可靠的库?

最佳答案

本地化是一个复杂的过程。有 200 多种语言和 500 多种区域变体。虽然这已经成为一项艰巨的学术任务,但还要加上政治问题和政府指令。描述什么在语言和文化上是合适的是一项艰巨的任务。即便如此,随着规范的变化和发展,它们也会随着时间的推移而变化。

增加这一困难的是在计算中我们有多个来源可以从中获得语言和文化定义。这些来源中的每一个都随着更高版本而变化。

因此,将所有这些加在一起,难怪您会看到跨编程语言和部署平台的不同本地化结果。

本地化定义的一个常见来源是大多数操作系统都提供的标准 C 库。众所周知, vendor 对问题的复杂性和细节感到不知所措,并且表现不佳。您应该尽可能避免使用此来源。

在某些平台上,例如 macOS,我们可以找到更高级别的框架,可以更好地处理本地化信息。

最好的跨平台源是 CLDR定义文件和 ICU库,均由 Unicode 联盟提供。更高版本的 Java 现在默认使用这些。一些数据库系统也是如此,例如 Postgres4D .

关于javascript - 有没有办法在基于区域设置格式化货币时获得一致的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57484368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com