Cathy-Chen258 发表于 2020-11-8 10:18:19

在printf中关于double占位符的问题(初学者)

本帖最后由 Cathy-Chen258 于 2020-11-8 10:22 编辑

#include <stdio.h>
#include <math.h>
int main()
{
        double p0,p1,r;
        int y;
        p0=1370536875;
        y=2050-2010;
        r=0.005;
        p1=p0*pow(1+r,y);
        printf("p1=%lf\n",p1);
        return 0;
}


问题1.用double的话,printf用%f还是%lf
问题2.用%lf(双精度)为什么输出时数据只精确到七位(我用“%.12f”时运算结果与计算器的答案不一样T-T)

(感谢你的热心帮助^-^)

昨非 发表于 2020-11-8 10:35:42

本帖最后由 昨非 于 2020-11-8 10:43 编辑

用double的话,printf用%f还是%lf
输出的时候都可以的
参考:https://blog.csdn.net/meme_yun/article/details/88586815

问题二:我这里十二位输出没问题

至于误差,程序计算精度太高时都难免或多或少的有浮点误差的


Cathy-Chen258 发表于 2020-11-8 10:49:28

昨非 发表于 2020-11-8 10:35
输出的时候都可以的
参考:https://blog.csdn.net/meme_yun/article/details/88586815



ok好的{:5_109:}

Cathy-Chen258 发表于 2020-11-8 10:55:07

昨非 发表于 2020-11-8 10:35
输出的时候都可以的
参考:https://blog.csdn.net/meme_yun/article/details/88586815



我怀疑是我的编译器版本问题运算精确七位以上都是直接给0{:5_99:}(我是说单单这道题)

昨非 发表于 2020-11-8 10:55:36

Cathy-Chen258 发表于 2020-11-8 10:55
我怀疑是我的编译器版本问题运算精确七位以上都是直接给0

额,这我就不清楚了

jackz007 发表于 2020-11-8 10:57:47

#include <stdio.h>

int main()
{
      double p1                                                 ;
      int k                                                   ;
      for(p1 = 1370536875 , k = 0 ; k <= 40 ; k ++) p1 *= 1.005 ;
      printf("p1 = %.12lf\n" , p1)                              ;
}
      编译、运行实况:
D:\00.Excise\C>g++ -o x x.c

D:\00.Excise\C>x
p1 = 1681509235.482084300000

D:\00.Excise\C>

Cathy-Chen258 发表于 2020-11-8 11:08:34

jackz007 发表于 2020-11-8 10:57
编译、运行实况:

首先很抱歉客观上给不到你“最佳答案”了但主观上还是很感谢你的帮助

其次就是那个第七行“for”里面那个思路我没看明白(初学者还没学到用for)T-T

衷心地谢谢你的热心回答{:5_110:}{:10_298:}

jackz007 发表于 2020-11-8 11:18:09

Cathy-Chen258 发表于 2020-11-8 11:08
首先很抱歉客观上给不到你“最佳答案”了但主观上还是很感谢你的帮助

其次就是那个第七行“for”里面 ...

   for 语句就是循环,在本例中,就是循环 40 次,执行这条语句
p1 = p1 * 1.005
   40 次,取得
p1 = 1370536875 * pow(1.005 , 40)
   的实际效果。
   这个计算结果符合你在计算器上得到的结果吗?

Cathy-Chen258 发表于 2020-11-8 11:33:13

jackz007 发表于 2020-11-8 11:18
for 语句就是循环,在本例中,就是循环 40 次,执行这条语句

   40 次,取得


哦!我懂这意思了但就是说你定义的“k”要使算式运到40次它的格式就是这样对吗?就是想理解如何设定循环次数

Cathy-Chen258 发表于 2020-11-8 11:36:03

jackz007 发表于 2020-11-8 11:18
for 语句就是循环,在本例中,就是循环 40 次,执行这条语句

   40 次,取得


我的运算结果跟你的一样但不和计算器的一样而已
页: [1]
查看完整版本: 在printf中关于double占位符的问题(初学者)