为啥 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?的主要内容,如果未能解决你的问题,请参考以下文章
Java Arrays 帮助:为啥我的代码打印 0? [关闭]