# Mixing Decimal and Double

Run into this quite a lot

Operator ‘+’ cannot be applied to operands of type ‘decimal’ and 'double’

I always mange to hack my way through it. But what’s the proper method for expressions that mix decimals and doubles?

The “programming environment” is the expression builder in the configurator rules.

The exact expression is

`JobMtl.QtyPer = (Round(((Inputs.P01_Dec_ActiveLength.Value + 9.9) / 20) ,0) + 1) * 0.06 / 51;`

Where input `Inputs.P01_Dec_ActiveLength.Value` is a decimal.

Edit:

The expression I end up with is
`JobMtl.QtyPer = System.Convert.ToDecimal ((System.Math.Round(((System.Convert.ToDouble(Inputs.P01_Dec_ActiveLength.Value) + 9.9) / 20) ,0) + 1) * 0.06 / 51);`

Not an expert, but I think you’re doing the right thing by explicitly converting your decimal to double before adding the 9.9. Any literal in C# with a decimal point is inferred as a double unless a suffix is added, so while 9.9 looks like a decimal to us, it’s actually a double.
Remember that Math.Round returns a double and consumes a double.

Unless precision if your goal, double should be fine.

Is the precision of a ‘decimal’ universal? (I mean like how IEEE standards exist for float and doubles). If so, to how many places?

Or is it dynamic based on the system setup? If I have the company configured to use 4 decimals places, does that mean that 0.0001 is the smallest resolution for a value of type decimal?

What dothe following statements return?

``````System.Convert.ToDecimal(0.00005)
0 or 0.0001?

System.Convert.ToDecimal(0.00009)
0 or 0.0001?``````

A little test can be done in Visual Studio to help answer your questions.

``````  static void Main(string[] args)
{
while (true)
{
decimal test1 = System.Convert.ToDecimal(0.00005);

Console.WriteLine(test1);
Console.WriteLine(test1.GetType().ToString());

decimal test2 = System.Convert.ToDecimal(0.00009);
Console.WriteLine(test2);
Console.WriteLine(test2.GetType().ToString());

var test3 = 0.00005D;
Console.WriteLine(test3);
Console.WriteLine(test3.GetType().ToString());

var test4 = 0.00009M;
Console.WriteLine(test4);
Console.WriteLine(test4.GetType().ToString());

var test5 = 1.04D + 9.9D;
Console.WriteLine(test5);
Console.WriteLine(test5.GetType().ToString());

var test6 = 1.04M + 9.9M;
Console.WriteLine(test6);
Console.WriteLine(test6.GetType().ToString());