我有一个浮点数,但我只希望数字达到2点精度。我如何在C ++中得到它?
float foo(float num) { // num=1234.567891
// code
return num2; // returns 1234.560000
}
答案 0 :(得分:1)
一种简单的方法是:
float foo(float num) {
return floor(num * 100) / 100;
}
您也可以考虑:
float foo(float num) {
return (int)(num * 100) / 100.0f;
}
负数可能存在差异。只有我可以从您的问题中获得的信息是,对于正数,您需要floor
(而不是round
)。
答案 1 :(得分:0)
您可以通过乘以舍入/截断来尝试将浮点数舍入到一定数量的小数位。
所以num = floor(num * 100.f) / 100.f;
会尝试截断到两位小数。
但请注意,这与修复浮点数的精度不同。根据定义,浮点数中的小数点浮动。而你只有大约7位精度。
所以你的原始数字不能像“1234.567891”那样精确 - 这对浮动来说太精确了。
也许更重要的是,这种功能的输出可能也不准确。 “1234.56”无法用float精确表示,因此返回的值不会是“1234.560000”。
数字的整数部分越大,小数点后面的数字越少。实际上,即使是中等数量也不能代表任何小数部分。
答案 2 :(得分:0)
浮点类型有自己的内部精度。你无法改变它。您可以通过各种方式调整值,但最终浮点类型可以管理自己的精度,并且您无法成功限制它们的作用。即使您设法将一堆零强制转换为某些值的低位,后续计算仍将使用完整精度,并且您只在计算中引入了一些随机噪声。
可以做的是控制输入和输出上的有效位数。而这几乎总是管理精确度的正确方法。