はじめに
JavaやC言語、Pythonなどのプログラミング言語で四捨五入を行うためにはround関数を使用します。
実はこのround関数はプログラミング言語ごとによって結果が異なるのはご存知でしょうか。
今回は、各プログラミング言語におけるround関数の処理結果の違いについてご紹介していきます。
四捨五入
四捨五入とは端数の最初の位が4以下の時は切り捨て、5以上の時は切り上げる方法です。
例えば1.4を小数点以下で四捨五入すると1、1.5を小数点以下で四捨五入すると2になります。
では各プログラミング言語で関数を使用し、表示結果を確認してみたいと思います。
Javaの場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class RoundSample{ public static void main(String[] args){ System.out.println("1.5を四捨五入:" + Math.round(1.5)); System.out.println("2.5を四捨五入:" + Math.round(2.5)); System.out.println("3.5を四捨五入:" + Math.round(3.5)); System.out.println("4.5を四捨五入:" + Math.round(4.5)); } } |
〈実行結果〉
算数での考え方同様に、端数が5の時は「切り上げ」が適用されています。
Python3の場合
1 2 3 4 5 6 7 |
print("1.5を四捨五入:" + str(round(1.5))) print("2.5を四捨五入:" + str(round(2.5))) print("3.5を四捨五入:" + str(round(3.5))) print("4.5を四捨五入:" + str(round(4.5))) |
〈実行結果〉
1.5や3.5の時は端数が5の時に「切り上げ」が適用されていますが、
2.5や4.5の時は「切り捨て」が適用されています。
結果を見てみるとすべて偶数になっています。
C言語の場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include<stdio.h> #include<math.h> int main(void){ printf("1.5を四捨五入: %.0lf\n" , round(1.5)); printf("2.5を四捨五入: %.0lf\n", round(2.5)); printf("3.5を四捨五入: %.0lf\n", round(3.5)); printf("4.5を四捨五入: %.0lf\n", round(4.5)); } |
〈実行結果〉
こちらはJavaの時と同じように四捨五入をした結果、「切り上げ」が適用されています。
C#の場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class RoundSample{ static void Main(string[] args){ Console.WriteLine("1.5を四捨五入:" + Math.Round(1.5)); Console.WriteLine("2.5を四捨五入:" + Math.Round(2.5)); Console.WriteLine("3.5を四捨五入:" + Math.Round(3.5)); Console.WriteLine("4.5を四捨五入:" + Math.Round(4.5)); } } |
〈実行結果〉
Python3と同じように結果がすべて偶数になるように四捨五入されています。
VisualVasicの場合
1 2 3 4 5 6 7 8 9 10 11 |
Sub Main() Console.WriteLine("1.5を四捨五入:" & Math.Round(1.5)) Console.WriteLine("2.5を四捨五入:" & Math.Round(2.5)) Console.WriteLine("3.5を四捨五入:" & Math.Round(3.5)) Console.WriteLine("4.5を四捨五入:" & Math.Round(4.5)) End Sub |
〈実行結果〉
Python3やC#と同じように結果がすべて偶数になるように四捨五入されています。
MySQLの場合
1 |
SELECT round(1.5), round(2.5), round(3.5), round(4.5) FROM dual; |
〈実行結果〉
JavaやC言語と同じようにすべての結果が端数5以上で切り上げられています。
処理結果が違う理由
上記の結果から、Java・C言語・MySQLでは端数が5の時round関数を使用すると「切り上げ」が適用され、Python・C#・Visual Studioでは端数が5の時round関数を使用すると「切り捨て」が適用されました。
各プログラミング言語によって結果が違うことが確認できました。
では、なぜプログラミング言語によってround関数の結果が違うのでしょうか。
JIS(日本産業規格)やISO(国際標準化機構)などの標準規格の中に四捨五入に関する記述があるのですが、その中に「1.5などの小数点第一位が5である少数の場合、丸め(切り上げor切り捨て)の結果は偶数の方を選ぶ」と明記されています。
Python3やC#、Visual Basicはこちらの規格を採用しているため、結果がすべて偶数となっています。
このような計算方法が採用されている理由はなぜでしょう。
それぞれの方法で四捨五入した結果の合計を比較しながら確認したいと思います。
|
元の数字 四捨五入前 |
Java等の 四捨五入 |
Python3等の 四捨五入 |
|
0.5 |
1 |
0 |
|
1.5 |
2 |
2 |
|
2.5 |
3 |
2 |
|
3.5 |
4 |
4 |
|
4.5 |
5 |
4 |
|
5.5 |
6 |
6 |
合計 |
18 |
21 |
18 |
上記表の合計を見てみると、Javaでの四捨五入方法よりPython3での四捨五入の方が元の数字とのズレが少ないことが分かります。
できるだけ元の数字に近づけるため、このような四捨五入の動きが用意されているのです。
おわりに
今回は同じ名前の関数でもプログラミング言語の種類によって処理結果が違うことについてround関数を例にご紹介しました。
この他にもプログラミング言語には様々な関数が用意されています。
今回の記事をきっかけに皆様が、様々なプログラミング言語に興味を持っていただければ幸いです。