Why is modulus operator not working for double in c#?

前端 未结 6 1061
粉色の甜心
粉色の甜心 2020-11-30 10:21

Consider this:

double x,y;
x =120.0;
y = 0.05;

double z= x % y;

I tried this and expected the result to be 0, but it came out 0.04933333.<

6条回答
  •  天命终不由人
    2020-11-30 11:02

    Because of its storage format, doubles cannot store every values exactly as is is entered or displayed. The human representation of numbers is usually in decimal format, while doubles are based on the dual system.

    In a double, 120 is stored precisely because it's an integer value. But 0.05 is not. The double is approximated to the closest number to 0.05 it can represent. 0.5 is a power of 2 (1/2), so it can be stored precisely and you don't get a rounding error.

    To have all numbers exactly the same way you enter / display it in the decimal system, use decimal instead.

    decimal x, y;
    x = 120.0M;
    y = 0.05M;
    
    decimal z = x % y;  // z is 0
    

提交回复
热议问题