業務画面内で、BigDecimal を利用しており、
画面に表示する際には、BigDecimal.toStringメソッドで文字列に変換していますが、
サーバから取得した時点では123.12 という値なのですが、
123.12000000000000 と小数点以下の0が増えた状態で表示されてしまいます。
別の画面では、正常に 123.12 と表示されており、
どちらも BigDecimal.toString を利用しています。
なぜなのでしょうか。
BigDecimal の元の値の型が、double なのか、String なのかで、
振舞いが変わるようでした。
asa でキャストしていたので、元の値の型までは意識できていませんでした。
開発時には、元の型をStringに統一するか、
BigDecimal.to-String の前に必ずスケールを設定するか、
どちらかをルールとして徹底する必要がありそうですね。
Code:
|| String型から作成したBigdecimal は
|| to-String で元にもどされて、123.12 と表示される
def bd = "123.12" asa BigDecimal
||def bd = {BigDecimal.from-String "123.12"}
{popup-message {bd.to-String}}
let bd-d:BigDecimal = 123.12 asa BigDecimal
||let bd-d:BigDecimal = {BigDecimal.from-double 123.12}
|| double型から作成したBigdecimal は
||to-String すると、123.12000000000000 と表示される
{popup-message {bd-d.to-String}}
||set-scale でスケールを指定することが出来るので
||この指定をして始めて 123.12 と表示することができる
set bd-d = {bd-d.set-scale 2}
{popup-message {bd-d.to-String}}