端数処理:切り上げの仕方
お世話になっております。
端数処理について調べていて
四捨五入ならRound関数、切り捨てならFix関数とヘルプにあったのですが
切り上げ処理の関数が見当たりません。
皆さんどのように処理されているのでしょうか。
教えていただきたいです。
-
yamamotoさん、
何も指定しなくても、書式だけ指定してあれば、自動的に切上げになりませんか?
-
tanda様
書式だけで切上げを実現する方法があるのですね。
知りませんでした。
調べてみます。私は端数処理前の値に
0.9や−0.9を足したものを
fixする計算式をかまして
おりました。 -
ところで切り上げの話ではなくて四捨五入についてですが
Magicのヘルプより、以下知りませんでした。
Round( 657.37, 3, -1)
660.00が返ります。
今まではこれを知らずに、10で割って1円未満をFIXした物を10倍して実現しておりました。 -
uniPaaS V1 Plus のRoundのヘルプには
Round( 657.37, 3, -1)
660.00が返ります。の記載はありませんでした。
ですが整数部四捨五入可能でした。
dbMAGIC V8でも可能でした。
今まで知らずに損をしておりました。 -
yamamoto様
私は書式だけで切り上げを実現する方法は未だにわかりませんが
fix ( 切り上げ前 + if ( 切り上げ前 < 0, -0.9, 0.9 ), 12, 0 )
をしております。 -
yamamotoさん、
下図はそのサンプルです。関数は使っていません。
無条件切上げの場合は、0.5を足しているだけです。
-
結果受取変数は、整数値 = (計算結果は小数点以下有り)+0.5 はいけますね。
tandaさんありがとうございました。結果受取変数が、小数点以下有りだとこの方法ではNGですね。
-
プログラムは、少しでも簡潔にしたほうが見通しがよくなりますね。
参考にしていただいて幸いです。
-
> 結果受取変数が、小数点以下有りだとこの方法ではNGですね。
切り上げた部分をわざわざ、「.00」という値で保持する必要はないですよ。😃
-
小数点以下有りの項目へ
切り上げ結果を渡したい場合、
1.1 + 0.5 → 1.6 になるので、切り上げにはなりません。
結果受取が小数点以下無しの項目の場合、
1.1 + 0.5 → 2で保存され切り上げになります。
なので切り上げ結果を画面や帳票へ表現するだけの場合は
使えますが、小数点以下有りの項目へ切り上げ結果をDB保存などする場合には
適さないという事です。 -
恐れ入ります。
早速端数処理をPGに組み込んでいるのですが、四捨五入は機能するのに
切り捨てと切り上げが機能しない状態になりました。
間違っていたらとても恥ずかしいのですがよろしければ値に入力した式を見ていただけないでしょうか。
誤っている場合は教えていただけると幸いです。
端数区分→1(切り捨て) 2(四捨五入) 3(切り上げ)

-
消費税_標準税率
という項目の書式は、10.2ですか? 10 ですか? -
nkmtさん、コメントありがとうございます。
すみません、表示する式を誤りました。
同じ式なのですがこちらの方が説明しやすいので編集しました。
上記、お手数ですが確認いただければと思います。
金額は明細金額になります。
単価が8.2で金額が10です。
切り捨ての場合、単価99.9*個数1=金額99となってほしいのですが100になってしまいます。
-
現状は、実データ明細金額は、
端数無し項目でしょうから、99.9×1を代入などした時点で
既に四捨五入済となっていると思います。
V_端数処理前金額(N10.2)を用意し、それの代入式を 単価 × 数量 とし
端数処理がまだされていないV_端数処理前金額 を用意。
実データ明細金額は、V_端数処理前金額 を切り捨て、四捨五入、切り上げ
するといいと思います。 -
nkmtさん、ありがとうございます!
今日また試してみます!
-
今回は単価だけが小数点以下があるとの事ですが、
数量も小数点以下2桁だった場合は、
端数処理前の値は、小数点以下第4位まで生じますので
端数処理前の値を保持する変数は、N10.4などが相応しいです。 -
以下のROUND(金額・・・とかFIX(金額・・・・の部分が
ROUND(単価×数量・・・やFIX(単価×数量・・・・であれば、
端数処理前小数点有り金額変数の用意は不要です。
-
nkmtさん、ご丁寧にありがとうございます。
現在は単価だけが小数点以下がありましたが、せっかくなので数量も小数点以下にしてやってみます。
「ROUND(単価×数量・・・やFIX(単価×数量・・・・」は、また使うときにチャレンジしてみます!
ありがとうございました。
-
nkmtさん、無事できました!ありがとうございます。
サインインしてコメントを残してください。
コメント
20件のコメント