/ は整数同士でも常に小数を返す(%/% との違い)
Rの/演算子は、両辺が整数であっても常に小数(浮動小数点数)を返します。商の整数部分だけが欲しい場合は%/%を使う必要があります。
なぜエラーが出ないのか
出力: 3.5
(エラーなし)- Rは何も報告しません。文法としても実行としても正しいコードだからです
3.5- 実際の出力 — 期待した結果と食い違っている箇所
このエラーが出る典型パターン
パターン1
1 total <- 7 2 people <- 2 3 print(total / people) ^
出力: 3.5期待: 3
整数同士の/でも、Rは常に小数を返します。商の整数部分だけが欲しい場合は%/%を使う必要があります。
直し方: / を %/% にします。
広告
広告スロット(未設定)
パターン2
1 minutes <- 100 2 hours <- 60 3 print(minutes / hours) ^
出力: 1.666667期待: 1
割り切れない整数の割り算は、/だと小数のまま返ってきます。切り捨てた商が欲しいなら%/%です。
直し方: / を %/% にします。
パターン3
1 apples <- 17 2 baskets <- 5 3 print(apples / baskets) ^
出力: 3.4期待: 3
エラーは出ないため、実際に出力を確認しない限り/が小数を返していることに気づけません。
直し方: / を %/% にします。
パターン4
1 distance <- 10 2 speed <- 3 3 print(distance / speed) ^
出力: 3.333333期待: 3
所要時間の切り捨てなど、整数の商だけが欲しい場面では%/%を明示的に使う必要があります。
直し方: / を %/% にします。
パターン5
1 price <- 500 2 count <- 3 3 print(price / count) ^
出力: 166.6667期待: 166
「整数同士の割り算だから結果も整数になるはず」という思い込みは誤りで、/は常に小数を返します。
直し方: / を %/% にします。
よくある誤解
「整数同士の割り算だから結果も整数になるはず」という思い込みは誤りです。/は常に小数を返す演算子で、切り捨てた商が欲しい場合は明示的に%/%に置き換える必要があります。
実務での勘所
整数同士の割り算が常に小数を返す設計は、PHP、Python 3、JavaScriptと同じ側の流儀で、C、Java、Rustのように切り捨てた整数を返す流儀とは逆です。剰余演算子%%についても、Rは除数の符号に合わせる((-7) %% 2は1になる)という、Pythonと同じ「floor」方式を採用しています。Javaのように被除数の符号に合わせる言語の経験があると、Rの%%の結果は直感に反して感じられることがあります。