繁体   English   中英

模数产生意外结果

[英]Modulo gives unexpected result

我在分子,分子和模上有一些问题。 7/3 = 2.3333333333给我1的模!! 一定有问题吗? 我学习了非客观的基础课程,因此我的代码很简单,并且简化了下面的代码。 (某些行是瑞典语)

调用方法:

 // Anropar metod och presenterar beräkning av ett bråktal utifrån täljare och nämnare
int numerator = 7;
int denumerator = 3;
System.out.println("Bråkberäkning med täljare " + numerator + " och nämnare " + denumerator + " ger " + fraction(numerator,denumerator));

和方法:

// Metod för beräkning av bråktal utifrån täljare och nämnare
public static String fraction(int numerator, int denumerator) {
    // Beräkning
    int resultat1 = numerator / denumerator;
    int resultat2 = numerator % denumerator;
    return Integer.toString(resultat1) + " rest " + Integer.toString(resultat2);
}

3两次进入7,剩下1。 答案应该是1。这就是模的含义

7模3给出1。由于7 = 2 * 3 + 1。

7 % 3 = 1

正如预期的那样。 如果您想使用.3333 ,则可以取模,并用分母表示,得到1 / 3 = 0.3333

(7.0 / 3.0) % 1 = 0.3333

嗯7%3 = 1

您会期待什么?

给定两个正数,a(被除数)和n(除数),模n(缩写为mod n)可以看作是除以a的余数。 例如,表达式“ 5 mod 4”的计算结果为1,因为5除以4留下的余数为1;而“ 9 mod 3”的计算结果为0,因为9除以3的余数为0; 将3乘以3后再从9中减去任何值。(请注意,使用计算器进行除法操作不会向您显示此操作所引用的结果,商将表示为小数。)当a或时n为负数,此幼稚的定义被破坏,并且编程语言在定义这些值的方式上有所不同。 尽管通常使用a和n都是整数来执行,但许多计算系统都允许使用其他类型的数字操作数。

更多信息: http : //en.wikipedia.org/wiki/Modulo_operation

你没问问题!

如果您的问题只是:

“ ...给我1的模!!一定是错误的吗?”

不,不是,7/3 = 2,并且取1的模。因为(3 * 2)+1 = 7。

整数的%不会给出小数部分,而是除法的余数。 这是从6开始的,它是最高的梅花2,比您的数字7低。7-6是1。

模运算符会提醒您除法。 因此,通常会得到数字1。

另外,请注意,您正在使用整数... 7/3 != 2.3333333333

最后一件事,请谨慎使用该代码。 除以零会导致程序崩溃。 ;)

您正在使用整数操作数,因此您将获得整数结果。 这就是语言的工作方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM