打印一个带两个小数位的双精度值(来自整数表达式)

时间:2019-07-14 04:58:11

标签: c double

我想使用c语言计算100000、200000、300000的乘积,即6000000000000000。但是我需要用小数点后两个零的双精度值来回答。

我使用了以下代码:

long double result = 100000 * 200000 * 300000;
printf("%.2LF", result);

预期输出:6000000000000000.00
实际输出:-593035264.00

1 个答案:

答案 0 :(得分:1)

(从Weather Vanes的评论中回答,将其变成一个Q / A对,如果愿意的话可以删除。)

表达式100000 * 200000 * 300000执行整数计算并溢出,这解释了您观察到的看似无关的结果值。

改为尝试100000.0 * 200000.0 * 300000.0(double)100000 * 200000 * 300000

原因?
计算表达式时不考虑目标变量(及其类型),
也就是说,您需要在=的右侧强制进行浮点计算。

请注意Davids的有用评论:
两倍的最大范围是1.79769e + 308-对于您的计算来说绰绰有余。