S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

Math#roundとMath#rint

VBで動いてる技術計算のソースをポーティング中。
^(べき乗)をMath#powにするの面倒じゃなぁ〜と思よったけど。


まさかVBのRound関数が四捨五入じゃないなんて!


ということで、VBのRound関数は「偶数丸め」ってことらしく、JavaではMath#rintを使えってことらしい。
「偶数丸め」は、根拠のある方法だからそれはそれでいいんだけどね。
異なる言語仕様で、同じ関数名/メソッド名が違うのはイヤな感じ。

double[] val = { -5.5d, -5.0d, -4.5d, -4.0d, -3.8d, -3.5d, -3.3d, -3.0d, -2.5d, -2.0d, -1.5d, -1.0d, -0.5d
		, 0.0d, 0.5d, 1.0d, 1.5d, 2.0d, 2.5d, 3.0d, 3.3d, 3.5d, 3.8d, 4.0d, 4.5d, 5.0d, 5.5d };
		
for ( int i = 0 ; i < val.length ; i++ ) {
    System.out.println("[round] " + val[i] + " - > " + Math.round(val[i]));
    System.out.println("[rint]  " + val[i] + " - > " + Math.rint(val[i]));
}

このコードで確認してみると、

[round] -5.5 - > -5
[rint] -5.5 - > -6.0
[round] -5.0 - > -5
[rint] -5.0 - > -5.0
[round] -4.5 - > -4
[rint] -4.5 - > -4.0
[round] -4.0 - > -4
[rint] -4.0 - > -4.0
[round] -3.8 - > -4
[rint] -3.8 - > -4.0
[round] -3.5 - > -3
[rint] -3.5 - > -4.0
[round] -3.3 - > -3
[rint] -3.3 - > -3.0
[round] -3.0 - > -3
[rint] -3.0 - > -3.0
[round] -2.5 - > -2
[rint] -2.5 - > -2.0
[round] -2.0 - > -2
[rint] -2.0 - > -2.0
[round] -1.5 - > -1
[rint] -1.5 - > -2.0
[round] -1.0 - > -1
[rint] -1.0 - > -1.0
[round] -0.5 - > 0
[rint] -0.5 - > -0.0
[round] 0.0 - > 0
[rint] 0.0 - > 0.0
[round] 0.5 - > 1
[rint] 0.5 - > 0.0
[round] 1.0 - > 1
[rint] 1.0 - > 1.0
[round] 1.5 - > 2
[rint] 1.5 - > 2.0
[round] 2.0 - > 2
[rint] 2.0 - > 2.0
[round] 2.5 - > 3
[rint] 2.5 - > 2.0
[round] 3.0 - > 3
[rint] 3.0 - > 3.0
[round] 3.3 - > 3
[rint] 3.3 - > 3.0
[round] 3.5 - > 4
[rint] 3.5 - > 4.0
[round] 3.8 - > 4
[rint] 3.8 - > 4.0
[round] 4.0 - > 4
[rint] 4.0 - > 4.0
[round] 4.5 - > 5
[rint] 4.5 - > 4.0
[round] 5.0 - > 5
[rint] 5.0 - > 5.0
[round] 5.5 - > 6
[rint] 5.5 - > 6.0