これは標準フォーマットでは不可能であると確信しています。次のようなものを使用することをお勧めします (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));
正規表現が好きなら、それらを使用できます。次の式を取り、それを 3 つのゼロで埋められた完全精度の数値文字列と突き合わせれば完了です。
^([0-9]|[1-9][0-9]|100)\.(9*)([0-8][0-9]{2})
どちらの提案も丸め誤差を引き起こす可能性があることに気付きました。99.91238123
になる99.9123
べきときになる99.9124
- したがって、最後の桁には追加の修正が必要です。実行するのは簡単ですが、私の提案はさらに醜いものになります。これは、エレガントでスマートなアルゴリズムとはかけ離れています。