【发布时间】:2013-09-27 11:57:57
【问题描述】:
int number1 = 23;
int number2 = 100;
printf("Output: %.2d", double(number1) / number2);
这是我想要的:
Output: 0.23
我明白了:
error: expected expression before ‘double’
我不明白错误信息。如何将整数转换为 double 并执行计算?
【问题讨论】:
int number1 = 23;
int number2 = 100;
printf("Output: %.2d", double(number1) / number2);
这是我想要的:
Output: 0.23
我明白了:
error: expected expression before ‘double’
我不明白错误信息。如何将整数转换为 double 并执行计算?
【问题讨论】:
那是因为你的类型转换错误,格式说明符也不正确:
printf("Output: %.2f", (double)number1 / number2);
这是输出:
【讨论】:
使用%f 格式说明符
printf("Output: %.2f", (double) number1 / number2);
【讨论】:
cast 的正确语法是(double)number1 / number2,你应该使用%.2f 作为格式说明符。
printf("Output: %.2f", (double)number1 / number2);
// ^ ^ ^
【讨论】:
你有两个错误。
首先,您的投射不正确。像这样加倍:
(double)number1
其次,您使用了错误的打印格式说明符。您使用了d,它用于整数。请改用f。综上所述:
printf("Output: %.2f", (double)number1 / number2);
【讨论】:
让我们看一下格式说明符的一些基础知识好吗?
**Format specifier** **Characters matched** **Argument type**
%c any single character char
%d, %i integer integer type
%u integer unsigned
%o octal integer unsigned
%x, %X hex integer unsigned
%e, %E,%f, %g, %G floating point
number floating type
%p address format void *
%s any sequence of
non-whitespace
characters char
您使用“%d”而不是“%f”,编译器无法打印浮点值。
【讨论】:
%c 的微妙细节:“参数类型”是 int。 “... int 参数转换为无符号字符,并写入生成的字符。” C11 7.21.6.1 8.
%s 的“参数类型”不是char。更像char *。 (“指向字符类型数组的初始元素的指针”)。 “字符匹配”和“任何非空白字符序列”听起来您指的是 scanf() 而不是 printf()。