关于数字分组的合理假设

时间:2013-10-30 18:02:14

标签: c++ localization heuristics

我一直在研究C ++类,从流中提取任意大小的数字,并希望利用数字标点区域设置方面。不用说,std :: num_get不会提取我的任意大小的数字类;它只提取内置数字类型。但是提取器可以从语言环境的numpunct和moneypunct方面获取格式化信息。

我遇到最麻烦的方面是数字分组。我得到的不是所有文化组合三位数,而且一些文化具有可变大小的数字组。

我发现了一个博客(http://blogs.msdn.com/b/oldnewthing/archive/2006/04/17/577483.aspx),其中展示了一些示例。维基百科(http://en.wikipedia.org/wiki/Decimal_mark#Examples_of_use)也有一个示例表。

C和C ++标准已经实现了一种在语言环境机制中处理这个问题的方法。但是这些实现为一些非常复杂的情况留下了语义空间。当我们告诉识别器需要正确的数字分组时,识别出一系列数字无处可见,将会非常复杂。

那么,我们可以通过做出一些假设来减少复杂性吗?这些来自我在所提供的示例中观察到的共性。

(假设1)只有最不重要的数字组可以具有不同的大小,并且它不能小于其他组'尺寸。

假设失败1,我们可能会重新开始:

(假设2a)不超过少数不同的尺寸。 (希望2.我还没有看到任何超过两种不同尺寸的例子。)

(假设2b)对于更有效的数字,不太重要的数字组总是比所有其他组长。

1 个答案:

答案 0 :(得分:0)

让我感到困扰的是,没有人解决这个问题,但最近我偶然发现了Unicode Consortium的 Common Locale Data Repository (或 {{ 3}}

进一步向下钻取,我找到了CLDR中数字格式模式的摘要图表(CLDR)。这包含两种基本分组模式:

  1. #,##,##0.###:印度语,传统用法
  2. # ####:中国和日本传统( 不在CLDR ;我后来发现了这个)
  3. #,##0.###:其他人
  4. 因此,即使我几年前的天真假设#1给出了比所需要的更多的自由度。

    但是,数字格式图表似乎只涵盖了基础10种现代语言。例如,它不包括Hittite,Mayan或Babylonian。

    最后,我不相信std::num_get适应非位置符号(如罗马数字)。