我一直在研究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)对于更有效的数字,不太重要的数字组总是比所有其他组长。
答案 0 :(得分:0)
让我感到困扰的是,没有人解决这个问题,但最近我偶然发现了Unicode Consortium的 Common Locale Data Repository (或 {{ 3}} )
进一步向下钻取,我找到了CLDR中数字格式模式的摘要图表(CLDR)。这包含两种基本分组模式:
#,##,##0.###
:印度语,传统用法# ####
:中国和日本传统( 不在CLDR ;我后来发现了这个)#,##0.###
:其他人但是,数字格式图表似乎只涵盖了基础10种现代语言。例如,它不包括Hittite,Mayan或Babylonian。
最后,我不相信std::num_get
适应非位置符号(如罗马数字)。