You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MQL4/MQL5双精度数位选取及按TickSize价格取整问题求助

MQL4/MQL5 技术问题解答

1. 提取双精度数的指定数位

整数部分数位提取

通过数学运算提取整数部分从右数第k位(个位为第1位):

int GetIntegerDigit(double number, int k) {
    long integerPart = (long)MathAbs(number);
    for(int i = 1; i < k; i++) {
        integerPart /= 10;
    }
    return (int)(integerPart % 10);
}
  • 调用示例:GetIntegerDigit(1256.57, 2) 返回十位的5,GetIntegerDigit(1256.57, 1) 返回个位的6。

小数部分数位提取

提取小数部分从左数第k位(小数点后第一位为第1位):

int GetDecimalDigit(double number, int k) {
    double decimalPart = MathAbs(number) - (long)MathAbs(number);
    for(int i = 1; i < k; i++) {
        decimalPart *= 10;
        decimalPart -= (long)decimalPart;
    }
    decimalPart *= 10;
    return (int)MathFloor(decimalPart);
}
  • 调用示例:GetDecimalDigit(1256.57, 1) 返回小数点后第一位的5,GetDecimalDigit(1256.57, 2) 返回第二位的7。

字符串方法提取(灵活定位)

将数值转为字符串后按索引提取,需注意小数点占位:

int GetDigitByIndex(double number, int index) {
    string numStr = DoubleToString(number, Digits);
    int dotIndex = StringFind(numStr, ".");
    // 若索引包含小数点位置,自动跳过
    if(dotIndex != -1 && index >= dotIndex) {
        index++;
    }
    if(index < 0 || index >= StringLen(numStr)) return -1; // 无效位置返回-1
    return (int)(StringGetChar(numStr, index) - '0');
}
  • 调用示例:GetDigitByIndex(1256.57, 3) 返回整数部分最后一位6(字符串索引从0开始)。

2. 按TickSize对资产价格取整的函数

根据需求实现向下取整、向上取整两种逻辑,同时通过NormalizeDouble修正浮点数精度误差:

向下取整(示例中输出1256.55)

double RoundPriceDown(double price, double tickSize) {
    double result = MathFloor(price / tickSize) * tickSize;
    return NormalizeDouble(result, Digits);
}

向上取整(示例中输出1256.60)

double RoundPriceUp(double price, double tickSize) {
    double result = MathCeil(price / tickSize) * tickSize;
    return NormalizeDouble(result, Digits);
}

调用示例

void OnStart() {
    double inputPrice = 1256.57;
    double tickSize = 0.05;
    Print("向下取整结果: ", RoundPriceDown(inputPrice, tickSize)); // 输出1256.55
    Print("向上取整结果: ", RoundPriceUp(inputPrice, tickSize));   // 输出1256.60
}

内容的提问来源于stack exchange,提问作者Feduz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:10:33