# Rounding up price values mql5

How do toy round up or down price value to whole numbers in Mql5? for example:

EUR/USD = price now: 1.1796;

Round up: = 1.1800

round down:=1.1700

USD/JPY: Price now= 109.45

Round up: = 110:00

round down:=109:00

Thanks.

The link does not tell you how to do that, if i use

`double Floorx= MathFloor(bid);`

for GBP USD 1.38671 I get 1, but i want to tell the function to return 1.3800. How do I modify this to work for all symbols?

Build a MathRound Function that takes a parameter for the digits to consider. Then you can control the rounding process.

Dominik Egert:
Build a MathRound Function that takes a parameter for the digits to consider. Then you can control the rounding process.

Can you give example code?

```#include <math_utils.mqh>
void OnStart()
{
double price = 1.1796;
PrintFormat("price = %.4f, Round down = %.4f, Round up = %.4f",
price, RoundToDigitsDown(price, 2), RoundToDigitsUp(price, 2));
}

// Output:
// price = 1.1796, Round down = 1.1700, Round up = 1.1800

```

How do you adjust this to cater for instruments like audusd  0.7369 to 0.7400? Or usdjpy 109.59 to 110.00? The former you want to round up decimals while the latter you round up integer?

Peter Kaiza:
How do you adjust this to cater for instruments like audusd  0.7369 to 0.7400? Or usdjpy 109.59 to 110.00? The former you want to round up decimals while the latter you round up integer?

You seem that you have missed your 'rounding class' in school days.

Flawed!

```#define PRINT( A) Print( #A + " = ", (A))

double MathNearest(  double v, double to){ return to * MathRound(v / to); }
double MathRoundDown(double v, double to){ return to * MathFloor(v / to); }
double MathRoundUp(  double v, double to){ return to * MathCeil( v / to); }

void OnStart()
{
//--- testing edge cases for floor
//--- MathFloor(lots / step) * step always fails this test.
PRINT(MathRoundDown(2.26, 0.01));     //2.25
PRINT(MathRoundDown(18.15, 0.01));    //8.14
PRINT(MathRoundDown(-9.13, 0.01));    //-9.14
PRINT(MathRoundDown(-65.18, 0.01));   //-65.19

//--- testing edge cases for ceil
//--- MathCeil(lots / step) * step always fails this test.
PRINT(MathRoundUp(9.13, 0.01));        // 9.14
PRINT(MathRoundUp(65.18, 0.01));       // 65.19
PRINT(MathRoundUp(-2.26, 0.01));       //-2.25
PRINT(MathRoundUp(-18.15, 0.01));      //-18.14
}
```

Simple and naïve functions, they don't take care of floating point roundoff errors.

Reason: