我非常有信心使用标准格式这是不可能的。我建议使用类似以下的内容(C# 之类的伪代码)。特别是我建议依靠字符串运算而不是使用数学代码,因为可能存在许多精度和舍入问题。
string numberString = number.ToStringWithFullPrecision();
int index = numberString.IndexOf('.');
while ((index < numberString.Length - 1) && (numberString[index + 1] == '9'))
{
index++;
}
WriteLine(number.PadRightWithThreeZeros().SubString(0, index + 4));
如果你喜欢正则表达式,你可以使用它们。采用以下表达式并将其与填充三个零的完整精度数字字符串匹配,您就完成了。
^([0-9]|[1-9][0-9]|100)\.(9*)([0-8][0-9]{2})
我刚刚意识到这两个建议都可能导致舍入错误。99.91238123
变成99.9123
它应该变成的时候99.9124
- 所以最后一个数字需要额外的更正。很容易做到,但让我的建议更加丑陋。这与优雅而智能的算法相去甚远。