Code Fix

初級

/ は整数同士でも常に小数を返す(%/% との違い)

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の%%の結果は直感に反して感じられることがあります。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)