为啥 5/7 打印 0?

Posted

技术标签:

【中文标题】为啥 5/7 打印 0?【英文标题】:Why does 5/7 print 0?为什么 5/7 打印 0? 【发布时间】:2013-07-22 07:54:21 【问题描述】:

刚开始学C,才知道/符号是除法运算符。我正在试验,想知道为什么 5/7 printf 是数字 0。

这是我的程序:

#include<stdio.h>

main()

    int n;
    n = 5/7;
    printf("%d", n);

谢谢!

【问题讨论】:

因为它的输出只是整数5/7 = 0.71.. = 整数部分是0。 C(和许多编程语言)以这种方式工作。您还需要学习float 数据类型。 您已将 n 声明为整数。 5/7 不是整数值。 / 执行integer division。 您可能对更多关于 C 的通用资源感兴趣并首先阅读它们。 C 常见问题解答涵盖了您的问题:c-faq.com/expr/truncation1.html Why does this division result in zero?的可能重复 【参考方案1】:

这是因为整数除法。 5/7 产生0.71..,这个数字的整数部分是0,因此它打印0。要解决此问题,请使用float 类型(或双精度类型)变量以及常量,例如尝试:

float f = 5.0 / 7.0;

使用格式字符串%f打印变量f

【讨论】:

作为初学者的好答案,试着写出完整的答案。请注意下面@Daniel Daranas 的回答。还有我添加的 没有我对@C_Beginner_Learner 的评论 @C_Beginner_Learner 作为朋友,我为您编辑(对于 OP,我发表评论,注意!),以便您知道how to complete an answer?(您的回答有点不完整)--- 还有如何要格式化,请尽快查看:Help-center【参考方案2】:

因为是0

5/7 是整数除法,因为 5 和 7 都是整数。整数除法 5/7 的结果是 0。

n,您将结果分配给的变量,也是int

如果你写了5.0/7.0,你就会有浮点除法。但是,由于您将结果分配给 n,也就是 int,因此它的值也将为 0。当然,如果您将 5.0/7.0 的结果分配给 double 变量,您会得到小数.

【讨论】:

两侧不需要显式投射,可以只投射一侧,另一侧会隐式投射。 @MarounMaroun 没必要,没错,但我不喜欢使用隐式转换。

以上是关于为啥 5/7 打印 0?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 println() 打印这个?

Java Arrays 帮助:为啥我的代码打印 0? [关闭]

为啥 echo "$0" 不在 bash 中打印脚本名称? [复制]

为啥 &vector_char[0] 打印所有字符?

登录 sqlplus 为啥总是打印用户名?

为啥我的 NSNumberFormatter 对象为输入 1.0 打印“2”?