16
A
回答
14
在斯卡拉,爲什麼餘(%)運算符返回一個負數?
對於模運算結果的符號有不同的約定; Wikipedia has a good article on it。斯卡拉像大多數但絕不是所有的編程語言一樣,都會得到股息的標誌(您的案例中的-3
)。
在Scala中獲得正餘數的首選方法是什麼?
我懷疑是否有普遍認同的首選方式;如果是我,請使用Math.floorMod
,它給出了除數的符號(示例中的2
)而不是分紅的結果(這不僅僅意味着與具有不同符號的%
相同的值,請參閱鏈接的JavaDoc瞭解詳情)。或者只是一個if
之後(if (result < 0) { result += M; }
[其中M
是除數,2
在您的示例中])。
2
使用math.abs(-x % y)
通常不會產生相同的行爲恢復了積極的模量:
scala> math.abs(-7 % 3)
res46: Int = 1
但是,這並不是什麼蟒蛇(返回正模量的語言)說:
In [14]: -7 % 3
Out[14]: 2
如果我們看看從-7增量3:
-7, -4, -1, 2, ..
scala
停止在-1
,而python
停止在2
。
9
正確的方式來獲得正模除數添加到負模量:
(-18 % 5) + 5
取絕對值會給你在這種情況下,錯誤的解決方案,但它會如果除數工作恰好是2
如果你不知道被除數的符號,你可以做這樣的事情:
((dividend % divisor) + divisor) % divisor
-2
例如,如果你想從陣列中濾除所有奇數元素,忽略負或正,則可以這樣做:
arr.filter {X => Math.abs(X%2)== 1}
1
我想添加一些現有的答案。我得到積極的其餘首選方法是一種新的方法添加到int類型如下:
object Extensions
{
implicit class ExtendedInt (val i: Int) extends AnyVal {
def positiveMod (m: Int) = {val x = i % m; if (x < 0) x + m else x}
}
}
在文件中要使用的方法,導入隱類:
import Extensions._
現在你可以做:
(-3).positiveMod(2)
你也可以把隱含的類在包中的對象,所以你不需要調用來自同一個包的功能時導入。
相關問題
- 1. 斯卡拉返回值計算在foreach
- 2. 關於斯卡拉* =運算符的返回值
- 3. 斯卡拉返回
- 4. 「=」運算符返回什麼?
- 5. 斯卡拉方法返回一個Future
- 6. 柯里數學運算在斯卡拉
- 7. 斯卡拉 - 前綴目運算符
- 8. <:<斯卡拉運算符
- 9. 斯卡拉綴/後綴運算符
- 10. 斯卡拉:減少{_ + _}返回負值,因爲值過高
- 11. 爲什麼迭代器運算符+返回一個副本?
- 12. 爲什麼〜運算符在Javascript中爲函數返回-1?
- 13. 是什麼|在斯卡拉
- 14. 斯卡拉 - 返回類型
- 15. 斯卡拉getClass.getResource()返回null
- 16. 斯卡拉返回類型
- 17. 斯卡拉foreach返回
- 18. 斯卡拉運算符重載與多個參數
- 19. 斯卡拉 - 返回地圖功能在斯卡拉
- 20. 斯卡拉返回不返回
- 21. 爲什麼Swift函數只能返回一個數學運算符?
- 22. 玩斯卡拉返回兩個對象
- 23. 爲什麼在C++中的pow()返回一個負數
- 24. 函數返回值斯卡拉
- 25. 斯卡拉函數返回類型
- 26. C#NOT(〜)位運算符返回負值
- 27. 爲什麼要返回一個負的errno? (例如,返回-EIO)
- 28. ++(或 - )運算符返回什麼?
- 29. 爲什麼德爾福Math.Payment函數返回一個負數
- 30. 斯卡拉:返回引用一個函數
這不是正確的公式!例如,5不等於-12模7,2是!它應該是'if(result <0)result + = M',其中'M'是模數的基數。 –
@RexKerr:歡迎編輯。 :-)我不得不承認我不是一個大數學傢伙。我已經將它複製到上面,但是也許可以進一步編輯以解釋OP的具體示例中「模數的基礎」是什麼;我見過的描述是關於除數和分紅的說法,而不是基數,我假設你並不是指數字基數......我認爲你的意思是除數,查看「floorMod」的文檔,這就是編輯我做了。 –