å°ä½æ¼ç®å (%)
Baseline
åºãå©ç¨å¯è½
ãã®æ©è½ã¯åºãå®è£ ããã¦ãããå¤ãã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã©ã¦ã¶ã¼ã§åä½ãã¾ãã2015å¹´7æä»¥éããã¹ã¦ã®ãã©ã¦ã¶ã¼ã§å©ç¨å¯è½ã§ãã
å°ä½æ¼ç®å (%) ã¯ã1 ã¤ç®ã®ãªãã©ã³ãã 2 ã¤ç®ã®ãªãã©ã³ãã§é¤ç®ãããã¨ãã®ä½ãã§ããå°ä½ãè¿ãã¾ããããã¯å¸¸ã«è¢«é¤æ°ã®ç¬¦å·ãåãã¾ãã
試ãã¦ã¿ã¾ããã
console.log(13 % 5);
// äºæ³ãããçµæ: 3
console.log(-13 % 5);
// äºæ³ãããçµæ: -3
console.log(4 % 2);
// äºæ³ãããçµæ: 0
console.log(-4 % 2);
// äºæ³ãããçµæ: -0
æ§æ
x % y
解説
% æ¼ç®åã¯ãæ°å¤ã¨é·æ´æ°ã® 2 種é¡ã®ãªãã©ã³ãã«å¯¾ãã¦ãªã¼ãã¼ãã¼ãããã¦ãã¾ããã¾ã両ãªãã©ã³ããæ°å¤åã«å¤æãããããã®åãæ¤æ»ãã¾ãã両ãªãã©ã³ããé·æ´æ°ã«ãªã£ãå ´åãé·æ´æ°ã®å°ä½ãå®è¡ãã¾ããããã§ãªãå ´åã¯æ°å¤ã®å°ä½ãå®è¡ãã¾ãã䏿¹ã®ãªãã©ã³ããé·æ´æ°ã«ãªãããã䏿¹ãæ°å¤ã«ãªã£ãå ´åã¯ãTypeError ãçºçãã¾ãã
n % d ã®æ¼ç®ã§ã¯ãn ãè¢«é¤æ°ãd ã餿°ã¨å¼ã³ã¾ãããã®æ¼ç®å¦çã¯ããªãã©ã³ãã®ããããã NaN ã§ãããã n ã ±ç¡é大ã§ããããã¾ã㯠d ã ±0 ã§ããå ´åã« NaN ãè¿ãã¾ãã
両æ¹ã®ãªãã©ã³ãã 0 ã§ã¯ãªãæéã§ããã¨ããå°ä½ r 㯠r := n - d * q ã¨ãã¦è¨ç®ããã¾ããããã§ q ã¯ã r ãã§ããã ã 0 ã«è¿ããè¢«é¤æ° n ã¨åã符å·ãæã¤æ´æ°ã§ãã
ãªããå¤ãã®è¨èªã§ã¯ '%' ã¯ãªãã¤ã³ãã¼æ¼ç®åã§ãããè¨èªã«ãã£ã¦ã¯ï¼ä¾ãã° Python ã Perl ã§ã¯ï¼ã¢ã¸ã¥ãæ¼ç®åã«ãªãã¾ããã¢ã¸ã¥ã㯠k := n - d * q ã¨å®ç¾©ããã¾ããããã§ q 㯠k ã餿° d ã¨åã符å·ãæã¡ããã¤ä½¿ç¨å¯è½ãªéã 0 ã«è¿ãæ´æ°ã§ãã 2 ã¤ã®ãªãã©ã³ãã®ç¬¦å·ãåãã§ããã°ã両è
ã¯ç価ã«ãªãã¾ããããªãã©ã³ãã®ç¬¦å·ãç°ãªãå ´åããªãã©ã³ãã®ç¬¦å·ãç°ãªãå ´åãã¢ã¸ã¥ãã®çµæã¯ç¬¦å·ãå¸¸ã« é¤æ° ã¨åãã«ãªãããªãã¤ã³ãã¼ã¯è¢«é¤æ°ã¨åãã«ãªãã¾ãã JavaScript ã§ã¢ã¸ã¥ããå¾ãã«ã¯ã n % d ã®ä»£ããã« ((n % d) + d) % d ã使ç¨ãã¦ãã ããã JavaScript ã§ã¯ããããåä½ã®ã·ããæ¼ç®åï¼<<ã>> ãªã©ï¼ã® 2 ã¤ç®ã®ãªãã©ã³ããæ£è¦åããããã«ãï¼å°ç¨ã®æ¼ç®åã®ãªãï¼ã¢ã¸ã¥ãæ¼ç®ã使ç¨ããããªãã»ãããå¸¸ã«æ£ã®å¤ã«ãªãã¾ãã
é·æ´æ°åã®é¤ç®ã§ã¯ãè¢«é¤æ° y ã 0n ã®å ´åã« RangeError ãçºçãã¾ããããã¯ã¼ãã«ããå°ä½ã¯ NaN ãè¿ãã¾ãããé·æ´æ°ã«ã¯ NaN ã®æ¦å¿µããªãããã§ãã
ä¾
>æ£ã®å¤ã®å°ä½
13 % 5; // 3
1 % -2; // 1
1 % 2; // 1
2 % 3; // 2
5.5 % 2; // 1.5
3n % 2n; // 1n
è² ã®å¤ã®å°ä½
-13 % 5; // -3
-1 % 2; // -1
-4 % 2; // -0
-3n % 2n; // -1n
NaN ã®å°ä½
NaN % 2; // NaN
ç¡é大ã®å°ä½
Infinity % 2; // NaN
Infinity % 0; // NaN
Infinity % Infinity; // NaN
2 % Infinity; // 2
0 % Infinity; // 0
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-multiplicative-operators > |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
- å ç®æ¼ç®å (
+) - æ¸ç®æ¼ç®å (
-) - é¤ç®æ¼ç®å (
/) - ä¹ç®æ¼ç®å (
*) - ã¹ã乿¼ç®å (
**) - ã¤ã³ã¯ãªã¡ã³ãæ¼ç®å (
++) - ãã¯ãªã¡ã³ãæ¼ç®å (
--) - åé
ãã¤ãã¹æ¼ç®å (
-) - åé
ãã©ã¹æ¼ç®å (
+) - Remainder operator vs. modulo operator by Dr. Axel Rauschmayer (2019)