Skip to main content

いつもありがとうございます。

ROUND関数で切り捨てした計算結果の文字列化の実現に関してです。

①ROUND([net_amt_usd]/[Pce],2) で小数点2桁の計算をさせるとちゃんと2桁で表示されるのですがですが、ROUND関数で切り捨てした計算結果の文字列化②STR(ROUND([net_amt_usd]/[Pce],2))で文字列にしたら表示が滅茶苦茶になってしまいます。

スクリーンショット 2022-10-11 120947文字列として扱いつつ、①の様な形で表示方法に関してご教示いただければと思います

 

1 answer
  1. Oct 11, 2022, 4:48 AM

    数値を文字列化すると表示が崩れるのは既知の仕様で、次のナレッジベースの記事に理由などの記載があります。

    数値形式の調整により数字を間違って丸めているように見える | Tableau Software

    ROUND関数で「切り捨てした」​とありますが、ROUND関数は切り捨てではなく四捨五入なので、四捨五入であるという前提で対応策を書くと、次のような式になります。​

    IF INT(ROUND([元データ], 2)) = ROUND([元データ], 2) OR REGEXP_MATCH(STR(ROUND([元データ], 2)), '\.\d{0,2}$') THEN

    STR(ROUND([元データ], 2))

    ELSE

    IIF(INT([元データ]) = 0, '0', '') +

    LEFT(STR(ROUND([元データ] * 100)), LEN(STR(ROUND([元データ] * 100))) - 2) +

    '.' +

    MID(

    STR(ROUND([元データ] * 100)),

    LEN(STR(ROUND([元データ] * 100))) - 1,

    IIF(RIGHT(STR(ROUND([元データ] * 100)), 1) = '0', 1, 2)

    )

    END

    四捨五入して整数になるか、あるいはSTRを掛けても小数点以下2桁までの表示に収まる(崩れない)場合はそのままSTRを掛けます。​そうでないときは元の値に100を掛けてROUNDして強制的に整数にし、後ろから2桁目と3桁目の間に小数点を差し込むという力業になっています。もっとスマートなやり方があるだろうとは思いますが、ご参考まで。

0/9000