【问题标题】:printf() and float errorprintf() 和浮点错误
【发布时间】: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 并执行计算?

【问题讨论】:

    标签: c casting double printf


    【解决方案1】:

    那是因为你的类型转换错误,格式说明符也不正确:

    printf("Output: %.2f", (double)number1 / number2);
    

    这是输出:

    http://ideone.com/10a1Ka

    【讨论】:

    • 谢谢!愚蠢的我没有看到我输入错误的方式。
    • 没关系 - 我们偶尔都会犯这样的错误 :-)
    【解决方案2】:

    使用%f 格式说明符

       printf("Output: %.2f", (double) number1 / number2);
    

    【讨论】:

      【解决方案3】:

      cast 的正确语法是(double)number1 / number2,你应该使用%.2f 作为格式说明符。

      printf("Output: %.2f", (double)number1 / number2);
      //                 ^   ^      ^ 
      

      【讨论】:

        【解决方案4】:

        你有两个错误。

        首先,您的投射不正确。像这样加倍:

        (double)number1
        

        其次,您使用了错误的打印格式说明符。您使用了d,它用于整数。请改用f。综上所述:

        printf("Output: %.2f", (double)number1 / number2);
        

        【讨论】:

          【解决方案5】:

          让我们看一下格式说明符的一些基础知识好吗?

          **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”,编译器无法打印浮点值。

          【讨论】:

          • 谢谢。很高兴知道。我尝试了 &f 和 &d,我认为 d 代表 double。但问题主要在于转换的语法。这是我的第一个 C 程序。
          • 欢迎来到stackoverflow xD
          • %c 的微妙细节:“参数类型”是 int。 “... int 参数转换为无符号字符,并写入生成的字符。” C11 7.21.6.1 8.
          • %s 的“参数类型”不是char。更像char *。 (“指向字符类型数组的初始元素的指针”)。 “字符匹配”和“任何非空白字符序列”听起来您指的是 scanf() 而不是 printf()
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-26
          • 2015-04-04
          • 1970-01-01
          • 2015-05-11
          • 1970-01-01
          • 2015-05-23
          相关资源
          最近更新 更多