TradeInsight

MQL4 Truncate Double with NormalizeDouble

Learn how to truncate double values in MQL4 using NormalizeDouble for precise trading calculations.

Truncating Doubles with NormalizeDouble in MQL4

In MQL4, the NormalizeDouble function is used to round or truncate a double value to a specified number of decimal places. This is crucial in trading applications to ensure price or pip values align with broker precision requirements, avoiding calculation errors.

Key Concepts

Example Code

void OnStart()
{
   double number = 123.45678;
   double truncated = TruncateDouble(number, 2);
   Print("Original: ", number, " | Truncated: ", truncated); // Output: Original: 123.45678 | Truncated: 123.45
}

double TruncateDouble(double value, int digits)
{
   // NormalizeDouble rounds, so we use a trick to truncate
   double multiplier = MathPow(10, digits);
   double truncated = MathFloor(value * multiplier) / multiplier;
   return NormalizeDouble(truncated, digits);
}
            

Explanation

1. Input: Start with a double value, e.g., 123.45678.
2. Multiplier: Multiply by 10^digits (e.g., 100 for 2 decimals) to shift the decimal point.
3. MathFloor: Use MathFloor to truncate by removing the fractional part after shifting (e.g., 12345.678 becomes 12345).
4. Divide Back: Divide by the multiplier to restore the decimal position (e.g., 12345 / 100 = 123.45).
5. NormalizeDouble: Ensure the result adheres to the specified precision (e.g., 123.45).

Why Use NormalizeDouble?

NormalizeDouble ensures the double value matches the precision expected by MetaTrader (e.g., 4 or 5 digits for forex pairs), preventing floating-point errors in calculations like lot sizes or stop losses.

Try It Yourself

Copy the code into MetaTrader 4's MetaEditor, compile it, and run it in a script to see the result in the Experts tab.

Example Output:

Original: 123.45678 | Truncated: 123.45