繁体   English   中英

ansi-c fscanf问题

[英]ansi-c fscanf problem

嗨,我读文件如下

       fscanf(fp,"%f %f %f\n",&*(p1+i), &*(p2+i), &*(p3+i));

我文件的行由三个浮点数组成...

我的问题是,在文件中,我有一些浮点,例如,点后最多两位数。 但是当我要求c使用不同格式来打印这些值时,例如%lf,%。2lf,%。4lf ...它开始使用数字播放...我唯一关心的是这个,如果我说1343.23在文件中,然后c将使用此值与计算中的值完全相同,否则它将使用点后的数字进行播放。 如果可以播放,那么如何使其完全使用浮点数呢? 例如在最后一种情况下,即使我要求它使用%.10lf打印该值,我也希望它仅打印1343.2300000000。 非常感谢!

“问题”是浮点数根据定义是近似的。 您应该阅读每位计算机科学家应该了解的有关浮点算法的更多信息。

另外,您可以将&*(x)简化为x ,因此应在fscanf调用中写出p1+ip2+ip3+i

当您读入字符串1343.23时,将其视为十进制数,它将转换为计算机的内部二进制表示形式。 使用格式说明符输出会从二进制转换为十进制。 在输出时,如果要求在小数点后输入不同位数,则可能不会获得完全相同的值。 在有限长度的二进制浮点数中,特定的浮点十进制数可能无法精确表示,因此应该四舍五入。

要获得更好的解释,请参阅著名的文章《每个科学家对浮点算法的了解》

点后的位数与fscanf没有任何区别。 您应该摆脱&*并在字符串的末尾添加新行:

fscanf(fp, "%f %f %f\n", p1 + i, p2 + i, p3 + i);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM