我有一个浮点数,但我只想要这个数字直到 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
例如)。
您可以尝试通过乘法和舍入/截断将浮点数舍入到一定的小数位。
所以num = floor(num * 100.f) / 100.f;
会尝试截断到小数点后两位。
但是请注意,这与固定浮点数的精度不同。根据定义,浮点数中的小数点floats。而且你只有大约 7 位数的精度。
所以你的原始数字不能像“1234.567891”那样精确——这对于浮点数来说太精确了。
也许更重要的是,您从此类函数中获得的输出也可能不准确。“1234.56”不能用浮点数精确表示,所以返回值不会是“1234.560000”。
数字的整数部分越大,小数点后可以表示的位数越少。事实上,即使是一个中等大的数字也根本不能代表任何小数部分。
浮点类型有自己的内部精度。你不能改变它。您可以通过各种方式调整值,但最终浮点类型管理它们自己的精度,并且您无法成功限制它们的功能。即使您设法将一堆零强制到某个值的低位,后续计算仍将使用完整精度,并且您只是在计算中引入了一些随机噪声。
您可以做的是控制输入和输出的有效位数。这几乎总是管理精度的正确方法。