在不使用库的情况下,如何在C中将浮点数四舍五入到两位?

在不使用库的情况下,如何在C中将浮点数四舍五入到两位?,c,bit-manipulation,C,Bit Manipulation,我正在学习操作系统编程,我需要假设我没有多少资源 例如,我应该如何计算2/3并将其截断为小数点后两位?有什么数学算法或位操作技巧我可以使用吗?四舍五入到小数点后两位:乘以100,转换为整数,除以100.0(请注意,一般情况下,浮点数在其本机表示形式中,小数点后有两个以10为基数的数字;但在本机表示形式中,这些数字不必是整数。) 出于这个原因,我实际上认为乘以100,并将其存储为一个整数,并理解为这表示一个单位的百分之一百,是表示“精确到小数点后两位的数字”的更准确的方法。四舍五入到小数点后两位:

我正在学习操作系统编程,我需要假设我没有多少资源


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

四舍五入到小数点后两位:乘以100,转换为整数,除以100.0(请注意,一般情况下,浮点数在其本机表示形式中,小数点后有两个以10为基数的数字;但在本机表示形式中,这些数字不必是整数。)


出于这个原因,我实际上认为乘以100,并将其存储为一个整数,并理解为这表示一个单位的百分之一百,是表示“精确到小数点后两位的数字”的更准确的方法。

四舍五入到小数点后两位:乘以100,转换为整数,除以100.0(请注意,一般情况下,浮点数在其本机表示形式中,小数点后有两个以10为基数的数字;但在本机表示形式中,这些数字不必是整数。)


出于这个原因,我实际上认为乘以100,并将其存储为整数,以理解这表示一个单位的百分之一百,是表示“精确到小数点后两位的数字”的更准确的方法。

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

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

如果不打算操作变量(只需打印它),还可以使用:

printf("%.2f\n", 2.f / 3);

如果不打算操作变量(只需打印),也可以使用:

printf("%.2f\n", 2.f / 3);
//这是BASIC的老把戏
//乘以100.0,再加上0.5(0.5表示四舍五入)
//通常,为了获得更准确的结果,您希望舍入而不是截断
//取该值的整数值以去掉额外的小数位数
//然后除以100.0,仅取整原始数字
//当然,您需要使用浮点
#包括
#包括
int main()
{
双a=1.0,b=2.0,c=3.0;
a=(int)((b/c)*100.0+0.5)/100.0;
printf(“%f\n”,a);//打印a的所有数字
printf(“%10.2f\n”,a);//只打印a的两个小数点
返回0;
}
//这是BASIC的老把戏
//乘以100.0,再加上0.5(0.5表示四舍五入)
//通常,为了获得更准确的结果,您希望舍入而不是截断
//取该值的整数值以去掉额外的小数位数
//然后除以100.0,仅取整原始数字
//当然,您需要使用浮点
#包括
#包括
int main()
{
双a=1.0,b=2.0,c=3.0;
a=(int)((b/c)*100.0+0.5)/100.0;
printf(“%f\n”,a);//打印a的所有数字
printf(“%10.2f\n”,a);//只打印a的两个小数点
返回0;
}

您不能将浮点数四舍五入到以10为底的两位或任何以10为底的位数,浮点数只是近似值。有很多以10为底的数不能精确表示为以2为底的小数位数,小数位数有限,这与无法表示数字的原因完全相同以10为基数的1/3,小数位数有限。您应该将浮点视为近似值,然后仅将其作为显示的一部分进行四舍五入。或者,如果不需要近似值,则可以使用整数表示1/100,然后将其除以100以获得要显示的值。

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

您所说的资源少是什么意思?它似乎与问题无关。一个问题是:你甚至想在你的操作系统中使用浮点数学吗?这有一定的复杂性。如果你想完全避免浮点运算,你可能想研究十进制数的定点表示法。你所说的“少量资源”是什么意思?它似乎与问题没有联系。一个问题是:你甚至想在你的操作系统中使用浮点数学吗你的操作系统?有一些复杂的问题。如果你想完全避免浮点数,你可能需要研究十进制数的定点表示法。
printf(“%f\n”,a);
不打印
a
printf(%.53f\n,a)的所有数字
打印
a
的所有数字,正如您自己所看到的,这并不漂亮:
0.67000000003996808686868655056354552574005126953125
printf(“%f\n”,a”);
不打印
a
printf(“%.53f\n”,a)的所有数字;打印
a
的所有数字,正如您自己所看到的,它并不漂亮:
0.670000000000000039968086868686868653535354552574005126953125
这不舍入。转换为整数截断。转换为整数截断。这只是整数除法。要获得浮点值,需要一个argum除法的元素必须转换为浮点类型。这只是整数除法。要获得浮点值,除法的一个参数必须转换为浮点类型。