https://minagachi.com/round-up-down
//+------------------------------------------------------------------+
//| Function: round down |
//+------------------------------------------------------------------+
double RoundDown(double val, int digit)
{
return ((double)(int)(val * MathPow(10, digit))) / MathPow(10, digit);
/*
上記式は、以下の手順を1行に集約したもの
double rev1 = val * MathPow(10, digit); // valに10のdigit乗を掛けて小数点位置をずらす
int rev2 = (int)rev1; // 整数に型変換することで小数点以下をカット
double rev3 = (double)rev2; // データ型をdoubleに戻す
double rev4 = rev3 / MathPow(10, digit); // 10のdigit乗で割って小数点位置を元に戻す
return rev4;
*/
}
//+------------------------------------------------------------------+
//| Function: round up |
//+------------------------------------------------------------------+
double RoundUp(double val, int digit)
{
double adjust = (val >= 0)? 0.9 : -0.9;
return ((double)(int)(val * MathPow(10, digit) + adjust)) / MathPow(10, digit);
/*
上記式は、以下の手順を2行に集約したもの
double adjust = (val >= 0)? 0.9 : -0.9; // valが0以上の場合はajust=0.9、そうでなければadjust=-0.9
double rev1 = val * MathPow(10, digit); // valに10のdigit乗を掛けて小数点位置をずらす
double rev2 = rev1 + adjust; // adjustの値を足す
int rev3 = (int)rev2; // 整数に型変換することで小数点以下をカット
double rev4 = (double)rev3; // doubleに戻す
double rev5 = rev4 / MathPow(10, digit); // 10のdigit乗で割って小数点位置を元に戻す
return rev5;
*/
}