プログラマメモ2 - programmer no memo2

floor - 切り捨てごめん 2012/10/01


先日、ひっかかたのでメモ。少数の切り捨てについてです。
少数点何桁以下を切り捨てるとかいうときのテクニックとして「10の倍数をかけて、floorを通してかけた数値で割る」というのがありました。ゼロの数が切り捨てたい少数の桁数になっていてわかりやすいと思いました。

Javaだと以下のようなコードかも

public class A {

    public static void main(String[] args) {
       double d = 123.45678;
       // 小数点2桁で切り捨て
       double d2 = Math.floor(d * 100)/100.;
       System.out.printf("%.2f   %f%n", d2,d2);
    }
}

実行結果は、
123.45   123.450000
さらにJavaですとBigDecimalを使うというのもあありかもです。

import java.math.BigDecimal;

public class B {

    public static void main(String[] args) {

        BigDecimal decimal = new BigDecimal(123.45678);
        BigDecimal scaled = decimal.setScale(2, BigDecimal.ROUND_DOWN);
        System.out.println(decimal);// この結果は常にこうなのか?
        System.out.println(scaled);
      
    }

}

実行結果は、

123.4567799999999948568074614740908145904541015625
123.45

他にないかなー、調べてみるとエクセルでは、ROUNDDOWN関数が使えるようです。
この関数がいいなーと思った理由に、この関数の第2引数 に桁数を指定できるようになっていることです。




: