小数点以下の数値を丸める3つの関数 MathRound,MathCeil,MathFloor

関数

数学関数

round、ceil、floor 関数も MathRound、MathCeil、MathFloor関数と同じ処理をします。

小数点以下を丸める関数

MathRound、MathCeil、MathFloor関数は小数点以下を丸めます。

似たような関数で NormalizeDouble関数がありますが、こちらは指定した小数点より下の桁をを四捨五入して丸めます。

データ型と構成・戻り値

double MathRound(①);
double MathCeil(①);
double MathFloor(①);
double round(①);
double ceil(①);
double floor(①);
関数名データ型戻り値
MathRound double小数点以下の数値を四捨五入。
MathCeildouble小数点以下の数値を切り上げ。
MathFloordouble小数点以下の数値を切り捨て。
rounddouble小数点以下の数値を四捨五入。MathRoundと同じ。
ceildouble小数点以下の数値を切り上げ。MathCeilと同じ。
floordouble小数点以下の数値を切り捨て。MathFloorと同じ。

引数 [1]

MathRound、MathCeil、MathFloor関数は 1個の引数で構成されます。


引数名データ型単位初期値説明
valuedouble浮動小数点を持った数値。

使用例

MathRound、MathCeil、MathFloor関数を使ったログ出力

変数 val に浮動小数点数を持った数値を代入して、小数点以下を丸めるコードです。

コード

// MathRound、MathCeil、MathFloor 関数
#property strict

double val1 = 1.4;
double val2 = 2.5;
double val3 = 3.6;

void OnInit() {
   Print("四捨五入val1 :", MathRound(val1));
   Print("四捨五入val2 :", MathRound(val2));
   Print("四捨五入val3 :", MathRound(val3));
   
   Print("切り上げval1 :", MathCeil(val1));
   Print("切り上げval2 :", MathCeil(val2));
   Print("切り上げval3 :", MathCeil(val3));
   
   Print("切り捨てval1 :", MathFloor(val1));
   Print("切り捨てval2 :", MathFloor(val2));
   Print("切り捨てval3 :", MathFloor(val3));
}

コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果

val1~val3 の値を変えていろいろ試してみてください。

指定した小数点数での切り上げ、切り捨て 関数の作成

MathCeil、MathFloor関数は小数点以下を切り上げ、切り捨てをする処理をしますが、指定した小数点の桁で切り上げ、切り捨てが必要になることがあります。その場合は以下のように関数を作ることで対応することができます。

四捨五入をしたい場合は NormalizeDouble関数を使うと簡単にできるのでこちらを使うと良いでしょう。

コード

// 指定した小数点数での切り上げ、切り捨て 関数
#property strict

int dpoint = 5; // ①小数点以下を表示する桁数

double val1 = 1.23456789;
double val2 = 9.87654321;
double val3 = 1.525354555;
double valr;

void OnInit() {
   Print("切り上げval1 :", mceil(val1));
   Print("切り上げval2 :", mceil(val2));
   Print("切り上げval3 :", mceil(val3));
     
   Print("切り捨てval1 :", mfloor(val1));
   Print("切り捨てval2 :", mfloor(val2));
   Print("切り捨てval3 :", mfloor(val3));
}

// 指定小数点より下の桁を切り上げする関数
double mceil(double val) {
   valr = MathCeil(val * MathPow(10, dpoint)) / MathPow(10, dpoint);
   return(valr);
}

//指定小数点より下の桁を切り捨てする関数
double mfloor(double val) {
   valr = MathFloor(val * MathPow(10, dpoint)) / MathPow(10, dpoint);
   return(valr);
}

コードをコンパイルして実行する方法はこちらを参考にしてください。(デモ口座でお試しください)

結果

「①小数点以下を表示する桁数」変数 dpointを変えることで小数点以下の桁数が変わってくるのでいろいろ試してみてください。尚、精度はデータ型が double型(浮動小数点)のため 16桁までになります。そのため誤差が発生します。今回の場合、変数 dpointを 2(小数点以下 2桁丸め)にした場合、以下のようになりますが、EA上でこのまま使われても問題になることはありません。

タイトルとURLをコピーしました