0

我正在学习操作系统编程,我需要假设我的资源很少。

那么我应该如何计算 2 / 3 并将其截断到小数点后两位?我可以使用任何数学算法或位操作技巧吗?

4

5 回答 5

5

您不能将浮点数四舍五入到以 10 为底的两个位置或任意数量的以 10 为底的位置,浮点数只是近似值。有很多以 10 为底的数字不能完全表示为具有有限小数位数的以 2 为底的数字,这与您不能用有限的小数位数表示以 10 为底的数字 1/3 完全相同的原因小数位。您应该将浮动视为近似值,然后仅将其作为显示的一部分进行舍入。或者,如果您不想要近似值,请执行类似使用整数表示 1/100 的操作,然后将它们除以 100 以获得要显示的值。

于 2012-10-20T06:12:06.283 回答
1

如果您不打算操纵变量(只是打印它),您也可以使用:

printf("%.2f\n", 2.f / 3);
于 2012-10-20T05:24:42.110 回答
0
// this is an old trick from BASIC
// multiply by 100.0 and add 0.5  (the 0.5 is for the rounding)
// normally you want to round rather than truncate for a more accurate result
// take the integer value of this to get rid of additional decimal places
// then divide by 100.0 to get the original number back only rounded
// of course you need to use floating point

#include <stdio.h>
#include <stdlib.h>

int main()
{
    double a=1.0, b=2.0, c=3.0;
    a = (int)((b/c)*100.0+0.5)/100.0;
    printf("%f\n",a);      // print all digits of a
    printf("%10.2f\n",a);  // print only 2 decimal points of a
    return 0;
}
于 2012-10-20T06:05:51.137 回答
0

四舍五入到小数点后两位:乘以 100,转换为整数,除以 100.0(但请注意,通常不能说浮点数,在其本机表示中,小数点后恰好有两个以十为基数的数字;这些不必是原生表示中的整数。)

出于这个原因 - 我实际上会争辩说,乘以 100,并将其存储为整数,并理解这代表一个单位的 100,是表示“精确到小数点后两位”的更准确的方式。

于 2012-10-20T05:13:58.570 回答
-1

我的策略之一是将浮点数(例如 2 / 3)乘以(10 ^ 精度)并通过强制转换为 int 来截断它。

于 2012-10-20T05:14:37.273 回答