您好,我按如下方式阅读了文件
fscanf(fp,"%f %f %f\n",&*(p1+i), &*(p2+i), &*(p3+i));我的文件行由三个浮点数组成...
我遇到的问题是,在文件中,假设我有一些浮点数,假设点后最多有两位数。但是当我要求c使用不同的格式打印这些值时,例如%lf,%.2lf,%.4lf...它开始玩弄数字...我唯一关心的是,如果我假设文件中有1343.23,那么c会完全按照计算中的方式使用这个值,或者它将播放圆点后面的数字。如果它可以播放,那么如何才能让它完全使用浮点数呢?例如,在最后一种情况下,即使我要求它使用%.10lf打印该值,我也希望它只打印1343.2300000000。?非常感谢!
发布于 2010-03-14 15:37:15
“问题”在于,根据定义,浮点数是近似值。您应该阅读以了解更多信息。
此外,您可以将&*(x)简化为x,因此您应该在fscanf调用中编写p1+i、p2+i和p3+i。
发布于 2010-03-14 15:33:44
当您读入字符串1343.23时,将其视为十进制数,将其转换为计算机的内部二进制表示形式。使用格式说明符的输出将从二进制转换为十进制。在输出时,如果在小数点后要求不同的位数,可能会得到不完全相同的值。特定的浮点十进制数可能无法在有限长度的二进制浮点数中精确表示,因此应该进行四舍五入。
有关更好的解释,请参阅著名的文章。
发布于 2010-03-14 15:27:11
点后的位数对fscanf没有任何影响。您应该去掉&*,并在字符串的末尾添加一个新行:
fscanf(fp, "%f %f %f\n", p1 + i, p2 + i, p3 + i);https://stackoverflow.com/questions/2441475
复制相似问题