LoginSignup
3
2

More than 3 years have passed since last update.

BigDecimal の stripTrailingZeros 使ってる人は気をつけて

Posted at

はじめに

お仕事で BigDecimal の stripTrailingZeros というメソッドを使っていて悲しくなったので記事にしました :cry:

stripTrailingZeros って何?

BigDecimal のメソッドで、末尾のゼロが削除された新しい BigDecimal を返します。

簡単にいうとこんな感じ

0.00 であれば 0
0.10 であれば 0.1

何があったのか

動作確認をしていると、 0.00% と表示されてしまうことがありました。

「あれ?ちゃんとエミュレーターでも動き確認してたのになぜ??」

調べてみると stripTrailingZeros が正常に動いてなさそう、、!

なぜ〜〜〜〜 :rolling_eyes:

原因

なんと、JDK7 だと正常に動作しないとのこと。。。

そりゃないよ。。

なので一部の Android 端末だと正常に動作しません :cry:

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 を表示するようにしました。
正規表現でも可能ですが、ひとまずはこれで良さそうです(めんどくさいだけ笑)

おわりに

他にも何か気をつけた方がいい点あれば教えていただけたら幸いです :hand_splayed:

みなさんも本当にお気をつけください!!

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2