使用floorf不能将数字舍入到小数点后两位

时间:2012-06-13 10:32:53

标签: c floating-point decimal rounding

我在这里找到了这个公式:

podrucje[i][j] = floorf(podrucje[i][j]  * 100 + 0.5)/100;

其中podrucje[][]是浮点矩阵。 floorf会返回正确的值(desired * 100),但问题在于/100。例如,如果我有49.599998floorf会返回4960.000,除以100后,结果将再次为49.599998

问题出在哪里?

我知道我可以在打印时对其进行舍入,但是我将在Excel中使用此矩阵,将其转换为范围,因此我无法影响表示。

2 个答案:

答案 0 :(得分:3)

大多数十进制数字不能完全表示为浮点数。

你可能需要将它们存储为整数,或者在转换为人类可见的东西时进行舍入(即打印出数字)。

如果您想使用该数字进行进一步计算并需要先进行舍入,请使用不同的表示法。

答案 1 :(得分:1)

这是浮点运算表示的一个基本问题,它不是基数10!您可以打印一个基数为10,但舍入到小数点后2位。

跨越边界安全地导出数字的标准安全方法是通过纯文本ascii而不是二进制文件。