在Linux上使用大货币(或数字)的Qt区域设置格式

时间:2011-05-17 18:26:45

标签: c++ linux qt

我正在尝试将数字格式化为货币并遇到问题。我已尝试使用默认语言环境和特定语言环境(如下所示)。尽管如此,该数字仍采用科学记数法格式化。

QLocale::setDefault( QLocale(QLocale::English, QLocale::UnitedStates) );
reportCost->setText( QString("$%L1").arg( cost ) );

麻烦的是,一旦我达到数百万,我就会获得$1.6473e6而不是$1,647,312这样的数字。我该如何解决这个问题?

另外,在Qt中根本没有办法格式化货币,比如定位符号和正确的负面表示吗?

我现在无法在Windows上测试,所以我不知道这是否是特定于Linux的。

2 个答案:

答案 0 :(得分:3)

不幸的是,QLocale的当前实施在许多这些方面都不尽如人意。请参阅"QLocale: It’s about time (and dates, and languages, and …)",了解将来的发展方向。

目前,一个快速而肮脏的解决方案是:

QString("$%L1").arg(amt, 0, 'f', 2);

如果您需要真正的本地化,ICU libraries可能会有所帮助。

答案 1 :(得分:0)

我知道这是一个古老的问题,但值得指出任何偶然发现这一点的人,在Qt 4.8及以上版本中,首先要尝试的是QLocale::toCurrencyString(...)