BigDecimal の stripTrailingZeros 使ってる人は気をつけて
はじめに
お仕事で 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 を表示するようにしました。
正規表現でも可能ですが、ひとまずはこれで良さそうです(めんどくさいだけ笑)
おわりに
他にも何か気をつけた方がいい点あれば教えていただけたら幸いです
みなさんも本当にお気をつけください!!
Author And Source
この問題について(BigDecimal の stripTrailingZeros 使ってる人は気をつけて), 我々は、より多くの情報をここで見つけました https://qiita.com/blendthink/items/b66b0cc960ae59aa6265著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .