4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【小ネタ】紛らわしいメソッド名(setScaleのせいで時間を無駄にした話。

Last updated at Posted at 2017-12-10

#はじめに
数字の精度を扱うような業務に携わらないとなかなか使うことがないのがBigDecimalクラス。んで、久しぶりにいじったらとってもはまってしまい時間を無駄にした、というお話。

#関連メソッド
BigDecimal
setScale(int newScale)
setScale(int newScale, int roundingMode)
setScale(int newScale, RoundingMode roundingMode)

#プログラム仕様
処理結果を小数点以下1桁で表示する

#プログラム
public static void main (String[] args) {

    BigDecimal deci = new BigDecimal("1.2345");
    
    System.out.println("deci 1:" + deci);
    
    deci.setScale(1, BigDecimal.ROUND_DOWN);
    
    System.out.println("deci 2:" + deci);
    
}

#実行結果
deci 1:1.2345
deci 2:1.2345

#???
さて、この実行結果が出たことで、作業が丁寧な方は、まずJavaDoc、となるでしょうし、勘の良い方は「あぁ、、、」となるんでしょうが、私は無駄にあれこれと、、、解決までにかれこれ20分くらい時間がかかってしまいました。。。(><)。なんでや?と。。。

#プログラム2
public static void main (String[] args) {

	BigDecimal deci = new BigDecimal("1.2345");
	
	System.out.println("deci     1 :" + deci);
	
	deci.setScale(1, BigDecimal.ROUND_DOWN);
	
	System.out.println("deci     2 :" + deci);

	BigDecimal deciDecci = deci.setScale(1, BigDecimal.ROUND_DOWN);

	System.out.println("deciDecci  :" + deciDecci);
}

#実行結果2
deci 1 :1.2345
deci 2 :1.2345
deciDecci :1.2

#結論
結局、setScaleはインスタンスの内容を変更するものではなく、返り値を返すメソッドだったんですよね。。。それならせめてtoString()的な名前にして欲しかったという気もしつつ、やはり丁寧にJavaDoc一回見とけばよかったな、と。Calendarクラスとか他にもいろいろsetとかsetXXXってのあるけどもなぁ。

4
0
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
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?