「JavaScript による小数計算の誤差を無くす」なんだけど。
R ではなくて JavaScript の話なので,どうでもいいことなんだけど。
- var oldValue, newValue, diff;
- oldValue = 67;
- newValue = 66.9;
- diff = oldValue - newValue;
- diff = Math.floor(diff * 10) / 10; // 小数点第2位以下切り捨て
- console.log("今日は" + diff + "kgやせました!");
の結果が 0 になると大騒ぎ。
R は,
> old = 67
> new = 66.9
> (dif = old-new)
[1] 0.1
となる。ちゃんと丸めが行われる。
しかし,以下のように無理矢理やると,それはね。JavaScript と同じ結果になりますよ。
> floor(dif*10)/10
[1] 0
そうではなくて,
> floor(dif*10+0.5)/10
[1] 0.1
とやるのが,数値計算の定石。R の print は,これをもう少しスマートにやってくれているということ。