我正在学习操作系统编程,我需要假设我的资源很少。
那么我应该如何计算 2 / 3 并将其截断到小数点后两位?我可以使用任何数学算法或位操作技巧吗?
您不能将浮点数四舍五入到以 10 为底的两个位置或任意数量的以 10 为底的位置,浮点数只是近似值。有很多以 10 为底的数字不能完全表示为具有有限小数位数的以 2 为底的数字,这与您不能用有限的小数位数表示以 10 为底的数字 1/3 完全相同的原因小数位。您应该将浮动视为近似值,然后仅将其作为显示的一部分进行舍入。或者,如果您不想要近似值,请执行类似使用整数表示 1/100 的操作,然后将它们除以 100 以获得要显示的值。
如果您不打算操纵变量(只是打印它),您也可以使用:
printf("%.2f\n", 2.f / 3);
// 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;
}
四舍五入到小数点后两位:乘以 100,转换为整数,除以 100.0(但请注意,通常不能说浮点数,在其本机表示中,小数点后恰好有两个以十为基数的数字;这些不必是原生表示中的整数。)
出于这个原因 - 我实际上会争辩说,乘以 100,并将其存储为整数,并理解这代表一个单位的 100,是表示“精确到小数点后两位”的更准确的方式。
我的策略之一是将浮点数(例如 2 / 3)乘以(10 ^ 精度)并通过强制转换为 int 来截断它。