我正在尝试提取浮点值的整数和小数部分,我似乎遇到了一些奇怪的舍入问题,这可能是由于浮点数的存储方式不精确。
我有一些这样的代码来提取小数部分:
double number = 2.01;
int frac = int(floor(number * 100)) % 100;
然而,这里的结果不是 1,而是 0。这似乎是因为原来的 double 实际上被存储为:
2.0099999...
然而,运行 sprintf 似乎得到了正确的转换:
char num_string[99];
sprintf(num_string,"%f",number);
sprintf 如何在上述方法没有得到正确答案的情况下得到正确答案?