整数での /
と %
の演算子の挙動。
整数を整数で割ったら 整数 vs 浮動小数点数 どっち?
-
-5 / 4
は -1.25- PHP
- 割り切れないから浮動小数点数
- C言語派のために
intdiv
という関数もある
- Perl
- 割り切れないから浮動小数点数
-
use integer
を宣言するとC言語派に変わる
- Python
- 割り切れるか関係なく割り算したら浮動小数点数
- C言語派のために
//
という演算子もある
- Elixir
- 割り切れるか関係なく割り算したら浮動小数点数
- C言語派のために
div
という関数もある
- JavaScript
- はじめから整数と浮動小数点数の区別がない
- PHP
-
-5 / 4
は -1- C言語 / C++ / Scala / Java / Rust / Go言語
- 静的型付けの言語
- C言語 / C++ / Scala / Java / Rust / Go言語
-
-5 / 4
は -2- Ruby
- 仲間はずれ
- Ruby
※2020/09/16 ↑コメントを受けPHPに追記
※2020/09/16 ↑Elixirを追記
負の剰余(割り算の余り %
演算子)は 正 vs 負 どっち?
-
-5 % 4
は -1- C言語 / C++ / Scala / Java / Rust / Go言語
- 静的型付けの言語
- PHP / JavaScript
- Elixir
-
%
はなくてrem
を使う
-
- C言語 / C++ / Scala / Java / Rust / Go言語
-
-5 % 4
は 3- Perl
-
use integer
を宣言するとC言語派に変わる
-
- Python / Ruby
- Perl
※2020/09/16 ↑Elixirを追記
C言語 / C++ / Scala / Java / Rust / Go言語
-
/
- 整数を整数で除算すると整数になる
- 0に近い方に丸められる
-
%
(剰余)-
(a / b * b) + (a % b)
がa
と一致
-
a | b | a / b |
a % b |
---|---|---|---|
5 | 4 | 1 | 1 |
5 | -4 | -1 | 1 |
-5 | 4 | -1 | -1 |
-5 | -4 | 1 | -1 |
PHP
-
/
- 整数を整数で除算すると、割り切れない場合は浮動小数点数になる
-
%
(剰余)-
(int)(a / b) * b + (a % b)
がa
と一致 (intへのキャストは0に近い方に丸める)
-
-
intdiv
(整数の除算) (2020/09/16 コメントを受け追記)- 整数を整数で除算すると整数になる
- 0に近い方に丸められる
a | b | a / b |
intdiv(a, b) |
a % b |
---|---|---|---|---|
5 | 4 | 1.25 | 1 | 1 |
5 | -4 | -1.25 | -1 | 1 |
-5 | 4 | -1.25 | -1 | -1 |
-5 | -4 | 1.25 | 1 | -1 |
JavaScript
-
/
- 整数を整数で除算すると、割り切れない場合は浮動小数点数になる
- JavaScriptではそもそも整数も浮動小数点数も区別していない
- 整数を整数で除算すると、割り切れない場合は浮動小数点数になる
-
%
(剰余)-
Math.trunc(a / b) * b + (a % b)
がa
と一致 (Math.truncは0に近い方に丸める)
-
a | b | a / b |
a % b |
---|---|---|---|
5 | 4 | 1.25 | 1 |
5 | -4 | -1.25 | 1 |
-5 | 4 | -1.25 | -1 |
-5 | -4 | 1.25 | -1 |
Perl
use integer
を宣言していない場合。
-
/
- 整数を整数で除算すると、割り切れない場合は浮動小数点数になる
-
%
(剰余)-
floor(a / b) * b + (a % b)
がa
と一致 (floorは負の無限大の方向に丸める)
-
a | b | a / b |
a % b |
---|---|---|---|
5 | 4 | 1.25 | 1 |
5 | -4 | -1.25 | -3 |
-5 | 4 | -1.25 | 3 |
-5 | -4 | 1.25 | -1 |
Perl (use integer)
use integer
を宣言した場合。
-
/
- 整数を整数で除算すると整数になる
- 0に近い方に丸められる
-
%
(剰余)-
(a / b * b) + (a % b)
がa
と一致
-
a | b | a / b |
a % b |
---|---|---|---|
5 | 4 | 1 | 1 |
5 | -4 | -1 | 1 |
-5 | 4 | -1 | -1 |
-5 | -4 | 1 | -1 |
Python
Python3の場合。(2は違う)
-
/
- 整数を整数で除算すると、常に浮動小数点数になる
-
//
(整数除算)- 整数を整数で除算すると整数になる
- 負の無限大の方向に丸められる
-
%
(剰余)-
(a // b * b) + (a % b)
がa
と一致
-
a | b | a / b |
a // b |
a % b |
---|---|---|---|---|
5 | 4 | 1.25 | 1 | 1 |
5 | -4 | -1.25 | -2 | -3 |
-5 | 4 | -1.25 | -2 | 3 |
-5 | -4 | 1.25 | 1 | -1 |
Ruby
-
/
- 整数を整数で除算すると整数になる
- 負の無限大の方向に丸められる
-
%
(剰余)-
(a / b * b) + (a % b)
がa
と一致
-
a | b | a / b |
a % b |
---|---|---|---|
5 | 4 | 1 | 1 |
5 | -4 | -2 | -3 |
-5 | 4 | -2 | 3 |
-5 | -4 | 1 | -1 |
Elixir
こちらを参照
整数同士の除算演算子の挙動(Elixir) (@torifukukaiou さんの記事)
リンク
多言語シリーズの私の記事