【发布时间】:2021-11-27 17:47:56
【问题描述】:
因此,根据 C# 规则,在除法(int & int 除法)中,输出是一个 int。在 (FP & int Division) 中,它是一个 FP。
但随后会产生不同的输出。
int a = 45; //integer
decimal b = 5.0m; //floating point
Console.WriteLine(a/b); // "9"
输出是:9 //输出看起来像一个整数???为什么?
请注意,+、- 和 * 会产生预期结果:
Console.WriteLine(a * b); // "225.0"
除以非整数产生预期结果:
int a = 45; //integer
decimal b = 5.5m; //floating point
Console.WriteLine(a/b); // "8.181818181818181818"
输出是:8.181818181818181818 - / 输出是一个 FP,没关系。
谁能解释一下?
float / double 的结果更加一致 - 所有操作的输出中都没有零(这是有道理的,因为这些类型不存储小数点后位数的信息)
【问题讨论】:
-
output is an integer- 没有。输出是数字的字符串表示 - 在这两种情况下。如果您想要特定格式,请使用string.Format()- 例如。另外:你期望输出是什么?9.0?9.00?9.000? ...(提示:将除法的结果保存在变量中并使用调试器进行检查) -
我希望它是“9.0”,因为 5.0 是一个浮点数,就像 5.5 在不使用任何 string.Format() 的情况下以浮点数生成输出一样,我正在教我的学生“的一般规则”除法运算符”。但是,我不知道为什么它会在 9.0 P.S. 中截断零。我是一名教师,第一次教 C#。
-
作为一名教师,您应该知道,在数学上,
9等于9.0和9.00000000000000000000000000000000...。所以程序选择最短的。就像它打印5.5而不是5.50000(或者,例如,05.5)。另外,我没有任何冒犯的意思,但我相信在教授 C# 之前更好地理解 C# 的基础知识是明智之举? C# documentation 是一个很好的起点。 -
@FranzGleichmann 请注意,问题中使用的
decimal和5m与5.0m不同 - 所以很公平的预期除法结果将保留“小数点后一位”。因此,虽然看起来绝对愚蠢,但这个问题实际上有充分的理由存在。 -
我认为考虑“浮点”或“非浮点”值没有帮助。它们都是 all 浮点值。这是关于“保留多少有效数字”或“保留多少小数位”。