c - 从 c 中的文本文件读取浮点数时的值错误
问题描述
我正在阅读的文本文件包含如下值
125602365 119653955 126374444 124463807 127312438 128395899
和下面的代码来阅读它。
if(!(pvtcheck(0)))
{
fscanf(fp,"%f",&deltime);
printf("\ndeltime0=%f\n",deltime); ///Actual value is 125602365, but i am getting 125602368.
}
if(!(pvtcheck(1)))
{
fscanf(fp,"\t%f",&deltime);
printf("\ndeltime1=%f\n",deltime);///Actual value is 119653955, but i am getting 119653952.
}
/// same for pvtcheck(2),pvtcheck(3),pvtcheck(4)
if(!(pvtcheck(5)))
{
fscanf(fp,"\t%f",&deltime);
printf("\ndeltime5=%f\n",deltime); ///Actual value is 128395899, but i am getting 128395896.
}
在我写的评论中,任何不改变值的解决方案
解决方案
您需要使用double
类型代替float
,并使用%lf
格式说明符scanf
代替%f
。
double deltime;
fscanf(fp, "%lf", &deltime);
printf("\ndeltime0=%lf\n", deltime);
fscanf(fp, "\t%lf", &deltime);
printf("\ndeltime1=%f\n", deltime);
...
顺便说一句:因为printf
您可以使用其中一个,%f
或者%lf
它们都具有相同的含义。
另请阅读此 SO 文章
推荐阅读
- perl - 比较两个不同数组中可用字符串的两个子字符串
- yarnpkg - yar run->没有这样的文件或目录:'run'
- xamarin.forms - Xamarin-Forms 快速渲染器不起作用
- java - 带有 WHERE、AND、OR 子句的 Android Sqlite 搜索查询
- javascript - 如何将 USGS 地形图层添加到 Google Maps Javascript API
- c++11 - 使用 C++11 `for` 语句修改数据
- javascript - 如何防止损坏的音频 src 在控制台中打印错误消息?
- c# - 如何将现有的水晶报表从编程更改为新报表
- drupal - 将幻灯片中的视频与 Drupal 7 中的文章相关联
- android - 如何在 Android 中即时更改流媒体分辨率