由于项目需要,需要在qt下实现floatformat的函数。之前写过一个,但是写得不好。决定重新写一个,参考delphi xe2下的实现。把xe2下的相关代码都看了一遍,xe2的代码思路在这里贴出来。xe2下的代码在system.sysutils下,核心函数是InternalFloatToTextFmt。它有汇编的版本跟纯pascal的版本。汇编看不懂,参考的是纯pascal的版本。
整体流程是:
1)解析format格式化字符串
Result := 0;
DecimalSep := AFormatSettings.DecimalSeparator;
//根据系统取得小数点的符号
ThousandsSep := AFormatSettings.ThousandSeparator;
//根据系统取得千分位的符号。这两个最好也通过系统API来取,如果要做国际化的话,这两个在不同的系统上是不一样的。
if ValueType = fvCurrency then
Temp := Currency(Value)
else
Temp := Extended(Value);
if Extended(Temp) > 0 then
AIndex := 0
else
if Extended(Temp) < 0 then
AIndex := 1
else
AIndex := 2;
SectionIndex := FindSection(AIndex);
Sect