私はC++(ストリームを使用して)で小数点の後に最大4桁を印刷しようとしています。したがって、小数点以下4桁を必要としない場合は、実際に必要な小数点以下の桁数だけを使用します。最大4小数点を印刷
例:
1.12345 -> 1.1234
1.0 -> 1
1.12 -> 1.12
1.12345789 -> 1.1234
123.123 -> 123.123
123.123456 -> 123.1234
Iはstd::setprecision(4)
を試みたが、それは、有効桁数を設定し、テストケースに失敗:
123.123456 gives 123.1
Iもstd::setprecision(4)
と共にstd::fixed
を与える試みたが、それは、A与えます必要でない場合でも小数点以下の固定桁数:
1.0 gives 1.0000
std::defaultfloat
は私が必要としていて固定でも指数関数的でもないようです。しかし、小数点以下の桁数は適切に表示されておらず、有効桁数のオプションしかありません。
これは、カスタムコードを必要とし、印刷する値のBCDまたは文字列表現を処理します。浮動小数点数の基礎となる表現はバイナリであるため、必ずしも123.123の正確なバイナリ表現であるとは限りません。十分な小数点以下の桁数を示していれば、 'double x = 123.123; cout << x'は '123.1230000001'のようなものを出力できます。したがって、私は4つの小数点以下の桁を持つ文字列にdoubleを変換し、文字列を返す前に、小数点以下の後にゼロを削除する関数を書くことを提案したいと思います。 – Simon
あなたの例は問題の説明と一致しません。これらの例を見ると、末尾に0を付けずに4小数点以下を望むようになります。確かにちょうど4小数と同じではありません。さらに、IEEE浮動小数点値の表現の性質を考えると、Simonが指摘しているように、*「必要な数字」*が意味すると思われるもののより良い仕様を生成する必要があります。 – IInspectable
[浮動小数点演算について各コンピュータ科学者が知っておくべきこと](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)が必要です。 – IInspectable