●変なタイトル(笑)
イミフのタイトルのように思えました
切上げに変も正規もあるのかー? って
でも、変な切上げって、考え方があってそうで実は変(笑)
だって、小数第三位を端数処理(切上げ)して、小数第二位に丸めるとき
38.6109 を小数第三位で 切り上げると 38.61 になると・・・
小数第三位は " 0 " だから、38.61 は 38.61 のままでいいと
えっ? 0.0009 は無視ですかー?って目が丸くなりました(笑)
●しかし私も
ところで、その切上げロジックについて私も誤解していることがありました
今月頭に、切上げをしなければならないところで独自にロジックを作りました
それは・・・・
0.005を足してから小数第三位を四捨五入したら結果は同じになると
そのようにコーディングしていたのがありました
でも、今回のロジックの検証をExcelを用いて行った時
多桁で計算すると僅少ながら誤差が発生することがわかりました
端数処理する時に、する前のデータの小数第三位以下が全て0の時です。
●具体例で
具体時に言えば、 36.609 の小数第三位を切り上げる時は
38.6109 に 0.005 を加えてから小数第三位を四捨五入すればいいんだ!
そう思い、ロジックを組みました
確かに、 38.6109 + 0.005 = 38.6159 になり、小数第三位を四捨五入すれば
38.62 になります
でも、38.6100 の場合・・・たとえば 38.6100000000000000000000000の場合は
小数第三位を切上げ処理しても、 38.61 になりますが、
私のロジックも、 38.62 になってしまいます。
これに気付いて、大慌てでこっそり修正しました(笑)
●正規のロジック
もうね、簡単です
端数処理する桁より右側が全て 0 ならそのまま
それ以外は端数処理する桁の左を1加算する
以上、終了(笑) です
ロジックの詳細は割愛しますが考え方は上記を少し変更します
@小数第三位以下を小数第一位以下にするため、100倍します
A目的の数が整数ならばそのまま、そうでないならば1を加算
B目的の数を整数化します
C目的の数を100で割ります
とまあ、こんな感じですね
Excelで検証した結果・・・切上げの定義通りにコーディングしたら
定義通りの結果になりました
一件落着
人気ブログランキング