2012-03-21 Wed
【217】 端数処理の覚書
読書中の『10日で覚える JavaScript』は Lesson 10, 11 (p.95)までさらっと 流し読みした。まだ、エレガントなコードを書けるところまでは達していない。 JavaScript 一辺倒では、さすがに飽きてきたので、今日はちょっとだけ脱線 してみる。 前回、 【物流センター(倉庫)の在庫管理】 スタッフ用:仕分け、ピッキング、出荷作業用の検品用チェックシート なるものを、途中まで作った。で、その続きをやるには『端数処理』を行う必要 があるので、ちょっとメモ。 JavaScript では、次のメソッドを使えば簡単らしい。 Math.round() 四捨五入 Math.floor() 切り捨て Math.ceil() 切り上げ これは『JavaScript ポケットリファレンス』で調べた。やっぱ『逆引きリファ レンス』の本は便利だ。さっそく試してみる。 <pre> <script type="text/javascript"> <!-- var data = [3.4, 3.5, 3.04, -3.4, -3.5, -3.6, -3.04]; var num = data.length; for (var i=0; i<num; ++i){ document.writeln("4捨5入(" + data[i] + ") => " + Math.round(data[i])); document.writeln("切捨て(" + data[i] + ") => " + Math.floor(data[i])); document.writeln("切上げ(" + data[i] + ") => " + Math.ceil(data[i])); document.writeln(""); } // --> </script> </pre> 実行したら、こうなった。↓ 4捨5入(3.4) => 3 切捨て(3.4) => 3 切上げ(3.4) => 4 4捨5入(3.5) => 4 切捨て(3.5) => 3 切上げ(3.5) => 4 4捨5入(3.04) => 3 切捨て(3.04) => 3 切上げ(3.04) => 4 4捨5入(-3.4) => -3 切捨て(-3.4) => -4 切上げ(-3.4) => -3 4捨5入(-3.5) => -3 ← ? 切捨て(-3.5) => -4 切上げ(-3.5) => -3 4捨5入(-3.6) => -4 ← ? 切捨て(-3.6) => -4 切上げ(-3.6) => -3 4捨5入(-3.04) => -3 切捨て(-3.04) => -4 切上げ(-3.04) => -3 意外だったのは、切り捨てと切り上げが、負数でもちゃんとしてること。それ なのに、なぜか『負数の四捨五入』が、なんか納得できない結果に…。 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 ←|→ | ←|→ | -+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ 数直線で見れば、明らかに -5捨-4入 になって然るべきだと思うんだけど…。 例えば、Perl で四捨五入をやるなら、たぶんこうすると思う。↓#!/usr/bin/perl my @data = (3.4, 3.5, 3.04, -3.4, -3.5, -3.6, -3.04); for (my $i=0; $i<@data; ++$i) { my $flag = ($data[$i] < 0) * -1 + ($data[$i] >= 0); # 論理式(1 or -1) print "4捨5入($data[$i]) => ", int($data[$i] + 0.5 * $flag), "\n"; } __END__
実行結果。↓ c:\usr\edit\test-lib\gmcl>round_test.pl 4捨5入(3.4) => 3 4捨5入(3.5) => 4 4捨5入(3.04) => 3 4捨5入(-3.4) => -3 4捨5入(-3.5) => -4 4捨5入(-3.6) => -4 4捨5入(-3.04) => -3 ただ、 Perl で切り上げ、切り捨てをやるのは、逆に JavaScript より面倒に なるんだな…。だから、そっちは省いた。基本的に、切り捨て、切り上げという のは、『正の実数』限定の話題だと思っているので。。。 今回はこれでおしまい。
トラックバック - http://d.hatena.ne.jp/foussin/20120321/1332259174
リンク元
- 6 http://pipes.yahoo.com/pipes/pipe.info?_id=8dda7c5265619c2fb368495a3d11b784
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=10&ved=0CI0BEBYwCQ&url=http://d.hatena.ne.jp/foussin/20120303/1330729677&ei=u79oT5LBJaihmQWr-PDtCA&usg=AFQjCNEaD3REiibC4gLuHj3493SREBUHgw&sig2=bypzGi31m1UIbrOKioGDBg
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=5&ved=0CE8QFjAE&url=http://d.hatena.ne.jp/foussin/20101111/1289431274&ei=AChpT6GBHu_JmQXW6InxCA&usg=AFQjCNELgIcBbRI8ZpSySBrIi_QtmIjWSQ&sig2=08ddFWvrSkwm0E4JxgEJXw
- 2 http://d.hatena.ne.jp/keyword/write
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=履歴+メモリ+コマンド&source=web&cd=5&ved=0CEcQFjAE&url=http://d.hatena.ne.jp/foussin/20110530/1306689849&ei=dFZpT5mjFJCXmQXPhqGTCQ&usg=AFQj
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&frm=1&source=web&cd=9&ved=0CGMQFjAI&url=http://d.hatena.ne.jp/foussin/20111128/1322427576&ei=cZxpT8_wO_HGmQWMldn2CA&usg=AFQjCNGhiB4PzIjZkNKrK9i_kwHsM1tmHg&sig2=ZqCh1Ahr35IH-wtgXnDJbQ
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&sqi=2&ved=0CE4QFjAD&url=http://d.hatena.ne.jp/foussin/20120107/1325877970&ei=DcppT6jiIufEmAX58KmTCQ&usg=AFQjCNHXh5qw6RtZUy_33wMXRjbTDQIirQ
- 1 http://d.hatena.ne.jp/foussin
- 1 http://d.hatena.ne.jp/keyword/読書
- 1 http://d.hatena.ne.jp/notify-NotifyUser_POST_NG_CATEGORY?aHR0cDovL2QuaGF0ZW5hLm5lLmpwL2ZvdXNzaW4vMjAxMTA1MjgvMTMwNjU2OTQyMw==
