hack のためのネタ帳, etc,,,

×

状況

"%f" と .round() で境界値における結果が異なる。
$ ruby -e 'puts "%.1f" % 1.25'
1.2
$ ruby -e 'puts (1.25).round(1)'
1.3
あうち、orz

一瞬、ひょっとすると "%f" は偶数への丸めなのでは!?
とも思ったのだが、完全に気のせいだった。
$ ruby -e 'puts "%.1f" % 1.35'
1.4
$ ruby -e 'puts "%.1f" % 1.15'
1.1

上記の状況は、少なくとも以下の環境で発生している。
$ lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 16.04.4 LTS
Release:	16.04
Codename:	xenial
$ ruby --version
ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]

%f 丸め」とかでググってみると他の言語でも同じような状況らしい。
例えば以下。
20190228: 追記
以下のような話題を見かけたんだが、偶然にもと言うか、上で挙げている人の blog だった。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

管理人/副管理人のみ編集できます