はじめに
お仕事で BigDecimal の stripTrailingZeros というメソッドを使っていて悲しくなったので記事にしました
stripTrailingZeros って何?
BigDecimal のメソッドで、末尾のゼロが削除された新しい BigDecimal を返します。
簡単にいうとこんな感じ
0.00 であれば 0
0.10 であれば 0.1
何があったのか
動作確認をしていると、 0.00% と表示されてしまうことがありました。
「あれ?ちゃんとエミュレーターでも動き確認してたのになぜ??」
調べてみると stripTrailingZeros が正常に動いてなさそう、、!
なぜ〜〜〜〜
原因
なんと、JDK7 だと正常に動作しないとのこと。。。
そりゃないよ。。
なので一部の Android 端末だと正常に動作しません
※ Google IssueTracker にあげられてました
こんな感じになります。正常に動作するものとしないものが混じってるのがほんと厄介で気付きにくいです。。
fun printStripTrailingZeros(text: String) {
println(BigDecimal(text).stripTrailingZeros())
}
printStripTrailingZeros("1.0")
printStripTrailingZeros("0.0")
printStripTrailingZeros("0.00")
printStripTrailingZeros("0.10")
// result
// 1
// 0.0
// 0.00
// 0.1
対処方法
画面に表示する際に compareTo
で比較して、BigDecimal.ZERO
と等しければ 0 を表示するようにしました。
正規表現でも可能ですが、ひとまずはこれで良さそうです(めんどくさいだけ笑)
おわりに
他にも何か気をつけた方がいい点あれば教えていただけたら幸いです
みなさんも本当にお気をつけください!!