-1

我有一个浮点数,但我只想要这个数字直到 2 点精度。我如何在 C++ 中得到这个?

float foo(float num) { // num=1234.567891
    // code
    return num2;           // returns 1234.560000
}
4

3 回答 3

1

一个简单的方法是:

float foo(float num) {
    return floor(num * 100) / 100;
}

您还可以考虑:

float foo(float num) {
    return (int)(num * 100) / 100.0f;
}

负数可能存在差异。我可以从您的问题中获得的唯一信息是您想要的正数floor(而不是round例如)。

于 2013-02-04T12:55:42.760 回答
0

您可以尝试通过乘法和舍入/截断将浮点数舍入到一定的小数位。

所以num = floor(num * 100.f) / 100.f;会尝试截断到小数点后两位。

但是请注意,这与固定浮点数的精度不同。根据定义,浮点数中的小数点floats。而且你只有大约 7 位数的精度。

所以你的原始数字不能像“1234.567891”那样精确——这对于浮点数来说太精确了。

也许更重要的是,您从此类函数中获得的输出也可能不准确。“1234.56”不能用浮点数精确表示,所以返回值不会是“1234.560000”。

数字的整数部分越大,小数点后可以表示的位数越少。事实上,即使是一个中等大的数字也根本不能代表任何小数部分。

于 2013-02-04T13:17:55.613 回答
0

浮点类型有自己的内部精度。你不能改变它。您可以通过各种方式调整值,但最终浮点类型管理它们自己的精度,并且您无法成功限制它们的功能。即使您设法将一堆零强制到某个值的低位,后续计算仍将使用完整精度,并且您只是在计算中引入了一些随机噪声。

可以做的是控制输入输出的有效位数。这几乎总是管理精度的正确方法。

于 2013-02-04T13:51:00.393 回答