浮動小数点を 2 ポイントに丸める方法はありますか? 例:3576.7675745342556
になり3576.76
ます。
9 に答える
round(x * 100) / 100.0
フロートを維持する必要がある場合:
roundf(x * 100) / 100.0
標準ライブラリ関数を使用した柔軟なバージョン:
double GetFloatPrecision(double value, double precision)
{
return (floor((value * pow(10, precision) + 0.5)) / pow(10, precision));
}
印刷する場合は、代わりに、使用可能な印刷フォーマット機能を使用してください。
C++では
cout << setprecision(2) << f;
GUIにレンダリングするための丸めには、std::ostringstreamを使用します
私のようにフロートをお金にフォーマットするためにグーグルで検索している方のために:
#include <iomanip>
#include <sstream>
#include <string>
std::string money_format (float val)
{
std::ostringstream oss;
oss << std::fixed << std::setfill ('0') << std::setprecision (2) << val;
return oss.str();
}
// 12.3456 --> "12.35"
// 1.2 --> "1.20"
文字列として返す必要があります。float に戻すと、精度が失われます。
100 を掛け、整数に丸め (いずれにせよ)、100 で割ります。
フロートを使用しないでください。ドルを印刷する場合は、セント数を格納する整数を使用し、最後の 2 桁の前に小数点を印刷します。単純な計算 (単純な経済数学モデルなど) を行っていない限り、実際には数値の大きさのみが重要であり、近くの数値を減算することはありません。
精度を制限するには:
x が浮動小数点数の場合、丸めは行われません:
(10 進数で 2 桁上にシフトし、端数を取り除き、10 進数で 2 桁下にシフトします)
((int)(x*100.0)) / 100.0F
丸め付きフロート:
((int)(x*100.0 + 0.5F)) / 100.0F
丸めなしの倍精度:
((long int)(x*100.0)) / 100.0
倍精度丸め:
((long int)(x*100.0 + 0.5)) / 100.0
注: x は afloat
または adouble
であるため、小数部分は常に存在します。これは、# の表現方法 ( IEEE 754 ) と # の精度の違いです。
C99 はround()をサポートします
これを試してみてください、それは完全に機能します
float=3576.7675745342556;
printf("%.2f",float);
その中のいくつかのオブジェクトを変更して、コードを見て学習します。