私は浮動小数点数を持っていますが、精度が 2 ポイントまでの数値だけが必要です。これを C++ で取得するにはどうすればよいですか?
float foo(float num) { // num=1234.567891
// code
return num2; // returns 1234.560000
}
私は浮動小数点数を持っていますが、精度が 2 ポイントまでの数値だけが必要です。これを C++ で取得するにはどうすればよいですか?
float foo(float num) { // num=1234.567891
// code
return num2; // returns 1234.560000
}
簡単な方法は次のとおりです。
float foo(float num) {
return floor(num * 100) / 100;
}
次のことも検討してください。
float foo(float num) {
return (int)(num * 100) / 100.0f;
}
負の数との違いがあるかもしれません。あなたの質問から私が得ることができる唯一の情報は、あなたが望む正の数ですfloor
(round
例ではありません)。
乗算および丸め/切り捨てにより、浮動小数点数を特定の小数点以下の桁数に丸めることができます。
そのため、小数点以下 2 桁に切り捨てよnum = floor(num * 100.f) / 100.f;
うとします。
ただし、これはfloatの精度を固定することと同じではないことに注意してください。定義により、浮動小数点数の小数点はfloatです。また、精度は約 7 桁しかありません。
したがって、元の数値を「1234.567891」ほど正確にすることはできません。これは float には精度が高すぎます。
そしておそらくもっと重要なことに、そのような関数からの出力も正確ではない可能性があります。「1234.56」は float では正確に表現できないため、返される値は「1234.560000」にはなりません。
数値の整数部分が大きいほど、小数点以下を表すことができる桁数が少なくなります。実際、適度に大きな数でさえ、小数部分をまったく表すことはできません。