目次

, ,

【MQL4 / MQL5】数字をカンマ区切りの文字列にする

double 型の数字を受け取って、カンマ区切りの文字列にする関数。
参考ページのコードの DoubleToStr()DoubleToString() に変更して MT4, MT5 両対応にした。

DoubleToString() で文字列にした数値を整数部と小数部に分け、それぞれ sleftsright に代入している。
整数部 sleft は右から 3 桁ずつ切り取ってカンマを挟んでいく。
最後にカンマ区切りの整数部 formated と小数部 sright を連結している。

コード

//+------------------------------------------------------------------+
//| FormatDouble                                                     |
//+------------------------------------------------------------------+
string FormatDouble(double number,
                    int precision,
                    string pcomma = ",",
                    string ppoint = ".")
{
    string snum   = DoubleToString(number, precision);
    int    decp   = StringFind(snum, ".", 0);
    string sright = StringSubstr(snum, decp + 1, precision);
    string sleft  = StringSubstr(snum, 0, decp);
    string formated = "";
    string comma    = "";
 
    while(StringLen(sleft) > 3)
    {
        int    length   = StringLen(sleft);
        string part     = StringSubstr(sleft, length - 3);
        formated = part + comma + formated;
        comma    = pcomma;
        sleft    = StringSubstr(sleft, 0, length - 3);
    }
 
    if (sleft == "-")  comma = "";
    if (sleft != "")   formated = sleft + comma + formated;
    if (precision > 0) formated = formated + ppoint + sright;
 
    return(formated);
}

使用例

Print("1234567.890 → ", FormatDouble(1234567.890, 3));
 
// 出力結果
// 1234567.890 → 1,234,567.890

参考