メインコンテンツへスキップ

端数処理:切り上げの仕方

コメント

20件のコメント

  • Tanda

    yamamotoさん、

    何も指定しなくても、書式だけ指定してあれば、自動的に切上げになりませんか?

  • nkmt

    tanda様
    書式だけで切上げを実現する方法があるのですね。
    知りませんでした。
    調べてみます。

    私は端数処理前の値に
    0.9や−0.9を足したものを
    fixする計算式をかまして
    おりました。

  • nkmt

    ところで切り上げの話ではなくて四捨五入についてですが
    Magicのヘルプより、以下知りませんでした。
    Round(   657.37,    3,    -1)
    660.00が返ります。
    今まではこれを知らずに、10で割って1円未満をFIXした物を10倍して実現しておりました。

  • nkmt

    uniPaaS V1 Plus のRoundのヘルプには
    Round(   657.37,    3,    -1)
    660.00が返ります。の記載はありませんでした。
    ですが整数部四捨五入可能でした。

    dbMAGIC V8でも可能でした。
    今まで知らずに損をしておりました。

  • nkmt

    yamamoto様
    私は書式だけで切り上げを実現する方法は未だにわかりませんが
    fix  (  切り上げ前   +   if  ( 切り上げ前 < 0,   -0.9,    0.9  ),    12,   0   )
    をしております。

  • Tanda

    yamamotoさん、

    下図はそのサンプルです。関数は使っていません。
    無条件切上げの場合は、0.5を足しているだけです。

  • nkmt

    結果受取変数は、整数値 = (計算結果は小数点以下有り)+0.5 はいけますね。
    tandaさんありがとうございました。

    結果受取変数が、小数点以下有りだとこの方法ではNGですね。

  • Tanda

    プログラムは、少しでも簡潔にしたほうが見通しがよくなりますね。

    参考にしていただいて幸いです。

  • Tanda

    > 結果受取変数が、小数点以下有りだとこの方法ではNGですね。

    切り上げた部分をわざわざ、「.00」という値で保持する必要はないですよ。😃

  • nkmt

    小数点以下有りの項目へ
    切り上げ結果を渡したい場合、
    1.1 + 0.5 → 1.6 になるので、切り上げにはなりません。

    結果受取が小数点以下無しの項目の場合、
    1.1 + 0.5 → 2で保存され切り上げになります。

    なので切り上げ結果を画面や帳票へ表現するだけの場合は
    使えますが、小数点以下有りの項目へ切り上げ結果をDB保存などする場合には
    適さないという事です。

  • yamamoto

    tandaさん、nkmtさんコメントありがとうございます。

    今回は条件有の切り上げなのでnkmtさんのFIX関数を組み込んでみます。

    無条件かつ小数点以下なしの項目の場合は、tandaさんの+0.5を使わせてもらおうと思います。

    てっきりROUNDUP関数などの切り上げ用関数があると思っていたのでとても勉強になりました。

    ありがとうございました。

  • yamamoto

    恐れ入ります。

    早速端数処理をPGに組み込んでいるのですが、四捨五入は機能するのに

    切り捨てと切り上げが機能しない状態になりました。

    間違っていたらとても恥ずかしいのですがよろしければ値に入力した式を見ていただけないでしょうか。

    誤っている場合は教えていただけると幸いです。

    端数区分→1(切り捨て)  2(四捨五入)  3(切り上げ)

  • nkmt

    消費税_標準税率
    という項目の書式は、10.2ですか? 10 ですか?

  • yamamoto

    nkmtさん、コメントありがとうございます。

    すみません、表示する式を誤りました。

    同じ式なのですがこちらの方が説明しやすいので編集しました。

    上記、お手数ですが確認いただければと思います。

    金額は明細金額になります。

    単価が8.2で金額が10です。

    切り捨ての場合、単価99.9*個数1=金額99となってほしいのですが100になってしまいます。

  • nkmt

    現状は、実データ明細金額は、
    端数無し項目でしょうから、99.9×1を代入などした時点で
    既に四捨五入済となっていると思います。

    V_端数処理前金額(N10.2)を用意し、それの代入式を  単価 × 数量 とし
    端数処理がまだされていないV_端数処理前金額 を用意。

    実データ明細金額は、V_端数処理前金額 を切り捨て、四捨五入、切り上げ
    するといいと思います。

  • yamamoto

    nkmtさん、ありがとうございます!

    今日また試してみます!

  • nkmt

    今回は単価だけが小数点以下があるとの事ですが、
    数量も小数点以下2桁だった場合は、
    端数処理前の値は、小数点以下第4位まで生じますので
    端数処理前の値を保持する変数は、N10.4などが相応しいです。

  • nkmt

    以下のROUND(金額・・・とかFIX(金額・・・・の部分が
    ROUND(単価×数量・・・やFIX(単価×数量・・・・であれば、
    端数処理前小数点有り金額変数の用意は不要です。

  • yamamoto

    nkmtさん、ご丁寧にありがとうございます。

    現在は単価だけが小数点以下がありましたが、せっかくなので数量も小数点以下にしてやってみます。

     

    「ROUND(単価×数量・・・やFIX(単価×数量・・・・」は、また使うときにチャレンジしてみます!

    ありがとうございました。

  • yamamoto

    nkmtさん、無事できました!ありがとうございます。

サインインしてコメントを残してください。