C++ 放弃4个精度点?

C++ 放弃4个精度点?,c++,floating-point,floating-point-precision,C++,Floating Point,Floating Point Precision,我有一个浮点数,但我只想要精度达到2点的数字。如何在C++中得到这个?< /P> 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) {

我有一个浮点数,但我只想要精度达到2点的数字。如何在C++中得到这个?< /P>
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将尝试截断到小数点后两位

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

因此,您的原始数字不能像“1234.567891”那样精确-这对于浮点来说太精确了

也许更重要的是,这个函数的输出可能也不精确。“1234.56”不能用浮点数精确表示,因此返回的值将不是“1234.560000”


数字的整数部分越大,小数点后的数字就越少。事实上,即使是中等大小的数字也不能表示任何小数部分。

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


可以做的是控制输入输出上的有效位数。这几乎是管理精度的正确方法。< /P>不是C++的家伙,但是你能把它乘以100,然后把它作为一个整数,然后作为一个浮标,除以100吗?这是一个选项吗?code>int(num*100)/(float)100
请问有什么用途?如果您只想打印小数点后的两位,只需查找输出格式。请注意,不可能精确返回1234.56,因为它不能表示为浮点。你可以四舍五入,但不完全可以。我是像(int)(表达式)还是像static_int(表达式)那样进行类型转换?或者它们是相同的?
(int)(表达式)
是C风格<代码> STATICE-CAST(表达式)< /C> >是C++风格。无论你选择哪个都应该是一样的(注:我喜欢C)。如果您有
dynamic\u cast
和类似的构造,我建议使用第二种形式,因为它使代码更具规律性。