[英]Next odd number in javascript
要查找輸入的下一個奇數,請使用以下代碼:
a=5.4; // Input
b=Math.ceil(a); // Required to turn input to whole number
b=b+(((b % 2)-1)*-1); // Gives 7
細胞舍入功能是必需的。
這是安全的嗎?有更緊湊的方法嗎?
編輯 :當輸入已經是一個奇數整數時,沒有任何反應。 例如5.0將返回5
怎么樣
b += b % 2 ^ 1;
除以2后的余數將始終為0或1,因此^
運算符(異或)將其翻轉為相反的值。
(另外, (b & 1) ^ 1
也可以。哦,我猜b = b ^ 1
適用於正整數,但對於大整數來說會有問題。)
在提問者的要求下:
實現它的最緊湊的方法是
b = Math.ceil(a) | 1;
首先使用ceil()
獲得不小於a
的最小整數,然后通過按位或1來獲得不小於ceil(a)
的最小奇數,以確保設置最后一位而不改變任何其他內容。
要獲得嚴格大於a
的最小奇數,請使用
b = Math.floor(a+1) | 1;
位運營商上的Javascript符號的32位整數進行操作,所以值a
必須小於或等於2^31-1
,RESP。 第二個嚴格小一些。 此外, a
必須大於-2^31-1
。
如果有符號整數的表示不是兩個補碼,而是一個補碼或符號和大小(我不知道Javascript是否允許,Java不是,但它在C中是可能的), a
必須的值大於-1
- Math.ceil(a)
的結果。 Math.floor(a+1)
必須是非負的。
不是很短,但這更清晰:
a=5.4;
b=Math.ceil(a);
b = b % 2 ? b : b + 1;
嘗試這個:
a = 5.4
b = Math.ceil(a)
b = b%2 == 0 ? b+1 : b
y = Math.ceil((x - 1)/2)*2 + 1
在http://www.intmath.com/functions-and-graphs/graphs-using-jsxgraph.php上執行fn
沒有Math.ceil()
,可以這樣做:
b = a + a % 2 | 0 + 1;
NB。 我認為5.0
下一個奇數是7
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.