为什么N&KO使用3位小数点来显示定点数字,而其他所有文化都使用2位小数点? [英] Why does N'ko use 3 decimal places for displaying Fixed-Point ("F") numbers while literally every other culture uses 2?

查看:0
本文介绍了为什么N&KO使用3位小数点来显示定点数字,而其他所有文化都使用2位小数点?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

不同的区域性使用不同的小数分隔符:点(1.23)或逗号(1,23),或者-在波斯语(伊朗)的情况下-可能会找到omayyez或斜杠(۱٫۲۳或1/23)。我一直在测试我的库,它涉及到大量的数字解析(Timespan Parser),所以我一直在测试.NET对各种数字格式的处理。

当以"F" decimal format或数字("N")格式输出时,除N‘Ko("nqo"或"nqo-GN")外,所有区域性都显示两个小数位。为什么会这样?

下面的代码示例说明了这一点,但可能不需要理解或遵循下面的代码来回答此问题。


简要:

Console.WriteLine((1.23456).ToString("F", new CultureInfo("en-US"))); // 1.23 (2 dp in every culture other than "nqo" and "nqo-GN")
Console.WriteLine((1.23456).ToString("F", new CultureInfo("nqo"))); // 1.235

更详细:

double number = 1.2345678;

Console.WriteLine($"Testing {number.GetType().FullName}");
Console.WriteLine($"value: {number}");
foreach (var culture in new string[] { "", "en-US", "fr-FR", "fa-IR", "nqo", "nqo-GN" } ) {
    var cultureinfo = new System.Globalization.CultureInfo(culture);
    string fformat = number.ToString("F", cultureinfo);
    Console.WriteLine($"{fformat} -- {cultureinfo.EnglishName} -- "{cultureinfo.Name}"");
}

输出:

Testing System.Double
value: 1.2345678
1.23 -- Invariant Language (Invariant Country) -- ""
1.23 -- English (United States) -- "en-US"
1,23 -- French (France) -- "fr-FR"
1/23 -- Persian (Iran) -- "fa-IR"
1.235 -- N'ko -- "nqo"
1.235 -- N'ko (Guinea) -- "nqo-GN"

为简洁起见,对于每种类型的输出,我只用一个或两个区域性进行了说明。我确实尝试了搜索CultureInfo.GetCultures(CultureTypes.AllCultures)中的所有区域性,而N‘Ko(nqonqo-GN)是唯一具有3 DP的区域性。

请注意,这不是特定于double类型的。如果您还可以将上述代码中number的声明替换为以下任何一行:

,则会得到类似的结果:
float number = 1.2345678f;
decimal number = new decimal(1.2345678);
int number = 1;
BigInteger number = new BigInteger(1);

经过一些研究后,我猜问题是NumberFormatInfo.NumberDecimalDigits对于N‘Ko文化被设置为3,而对于每个其他文化被设置为2。但我找不到任何实际说明是这样或为什么会这样的东西。

Assert.AreEqual(2, new CultureInfo("en-US").NumberFormat.NumberDecimalDigits); // true (for every culture except N'Ko [nqo and nqo-GN])
Assert.AreEqual(3, new CultureInfo("nqo").NumberFormat.NumberDecimalDigits); // true (for N'Ko)

维基百科关于N'Ko alphabet的文章列出了N‘ko数字(߀‎߁‎߂‎߃‎߄‎߅‎߆‎߇‎߈‎߉‎)的unicode字符,这些字符从U+07C0开始,具有从右到左的方向性,并在Unicode5(2006年7月)中引入。它也有一个关于"N‘ko和计算机"的部分,但目前没有关于这个问题的任何内容。固定点格式似乎未使用N‘KO数字。

谁能解释一下为什么Microsoft选择将此区域性的定点("F")数字的小数位数设置为世界其他区域性的不同小数位数?

我非常好奇地想知道,但什么也找不到。N‘Ko如何将数字分组到小数点后有什么特别之处吗?是否需要第三位小数才能正确显示第二位小数(例如,由于连字或类似原因)?或者是微软让NumberDecimalDigits成为非静态的,从而让开发人员保持警觉?还是说这是个虫子?还是有其他文化原因?

推荐答案

我一直在深入研究.Net代码,发现如何实例化和创建区域性,以及如何在您的窗口中设置默认值。 因此,您可以通过转到您的区域设置来查看默认设置。如果您选择nqo,您将看到No的默认设置。小数后面的数字是3,因此.NET返回的是3而不是2。

查看屏幕截图:

我知道这不是关于你怎么做的真正答案,但你现在知道为什么了。

我很感兴趣,用谷歌搜索了一会儿,我唯一找到的就是这个链接,我在谷歌上用了这个词:"n‘ko"数字,第二个链接是这个http://www.languagesandnumbers.com/how-to-count-in-mandinka/en/mnk/它是关于曼丁卡数字的,几内亚使用的是一种系统

再挖一遍,我发现了计算器:

https://github.com/ckairaba/calculator-nko

也许通过使用该选项,您将获得更多信息

这篇关于为什么N&KO使用3位小数点来显示定点数字,而其他所有文化都使用2位小数点?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆