双重计算-怎么了?

问题描述 投票:-2回答:1

我有一个简单的代码,下面可以增加/减少一个名为COIN_VALUE的属性。当按下向上箭头时,它应该走:0.01、0.02、0.05、0.10、0.15等。如果按下DOWN,则应该为0.15,0.10,0.05,0.02,0.01。

我已在下面附上控制台结果。从0.05下降到0.02。我花了3天的时间来调整和更改代码,结果始终是相同的。有什么我想念的吗?

        public double COIN_VALUE
        {
            get
            {
                return coinValue;
            }

            set
            {
                Debug.WriteLine("*** COIN VALUE CHANGED " + ((value > 0) ? "UP" : "DOWN") + ". CURRENT COINVALUE = " + coinValue+" ***");

                if (value < 0)
                {
                    Debug.WriteLine("CHANGE DOWN 1");
                    if (coinValue <= 0.01)
                    {
                        Debug.WriteLine("CHANGE DOWN 2");

                        coinValue = 0.01;
                    }

                    else if (coinValue <= 0.02)
                    {
                        Debug.WriteLine("CHANGE DOWN 3");

                        coinValue = 0.01;
                    }

                    else if (coinValue <= 0.05)
                    {
                        Debug.WriteLine("CHANGE DOWN 4");

                        coinValue = 0.02;
                    }

                    else
                    {
                        Debug.WriteLine("CHANGE DOWN 5");

                        coinValue -= 0.05;
                        if (coinValue <= 0)
                        {
                            coinValue = 0.01;
                        }
                    }
                }

                else if (value > 0)
                {
                    Debug.WriteLine("CHANGE UP 1");

                    if (coinValue == 0.01)
                    {
                        Debug.WriteLine("CHANGE UP 2");

                        coinValue = 0.02;
                    }

                    else if (coinValue == 0.02)
                    {
                        Debug.WriteLine("CHANGE UP 3");

                        coinValue = 0.05;
                    }

                    else
                    {
                        Debug.WriteLine("CHANGE UP 4");

                        coinValue += 0.05;
                    }
                }

                Debug.WriteLine("COIN VALUE CHANGED " + ((value > 0) ? "UP" : "DOWN") + ". CURRENT COINVALUE AFTER CHANGE = " + coinValue);


            }
        }

和控制台结果:

[0:] *** COIN VALUE CHANGED UP. CURRENT COINVALUE = 0.01 ***
[0:] CHANGE UP 1
[0:] CHANGE UP 2
[0:] COIN VALUE CHANGED UP. CURRENT COINVALUE AFTER CHANGE = 0.02
[0:] *** COIN VALUE CHANGED UP. CURRENT COINVALUE = 0.02 ***
[0:] CHANGE UP 1
[0:] CHANGE UP 3
[0:] COIN VALUE CHANGED UP. CURRENT COINVALUE AFTER CHANGE = 0.05
[0:] *** COIN VALUE CHANGED UP. CURRENT COINVALUE = 0.05 ***
[0:] CHANGE UP 1
[0:] CHANGE UP 4
[0:] COIN VALUE CHANGED UP. CURRENT COINVALUE AFTER CHANGE = 0.1
[0:] *** COIN VALUE CHANGED UP. CURRENT COINVALUE = 0.1 ***
[0:] CHANGE UP 1
[0:] CHANGE UP 4
[0:] COIN VALUE CHANGED UP. CURRENT COINVALUE AFTER CHANGE = 0.15
[0:] *** COIN VALUE CHANGED UP. CURRENT COINVALUE = 0.15 ***
[0:] CHANGE UP 1
[0:] CHANGE UP 4
[0:] COIN VALUE CHANGED UP. CURRENT COINVALUE AFTER CHANGE = 0.2
[0:] *** COIN VALUE CHANGED UP. CURRENT COINVALUE = 0.2 ***
[0:] CHANGE UP 1
[0:] CHANGE UP 4
[0:] COIN VALUE CHANGED UP. CURRENT COINVALUE AFTER CHANGE = 0.25
[0:] *** COIN VALUE CHANGED DOWN. CURRENT COINVALUE = 0.25 ***
[0:] CHANGE DOWN 1
[0:] CHANGE DOWN 5
[0:] COIN VALUE CHANGED DOWN. CURRENT COINVALUE AFTER CHANGE = 0.2
[0:] *** COIN VALUE CHANGED DOWN. CURRENT COINVALUE = 0.2 ***
[0:] CHANGE DOWN 1
[0:] CHANGE DOWN 5
[0:] COIN VALUE CHANGED DOWN. CURRENT COINVALUE AFTER CHANGE = 0.15
[0:] *** COIN VALUE CHANGED DOWN. CURRENT COINVALUE = 0.15 ***
[0:] CHANGE DOWN 1
[0:] CHANGE DOWN 5
[0:] COIN VALUE CHANGED DOWN. CURRENT COINVALUE AFTER CHANGE = 0.1
[0:] *** COIN VALUE CHANGED DOWN. CURRENT COINVALUE = 0.1 ***
[0:] CHANGE DOWN 1
[0:] CHANGE DOWN 5
[0:] COIN VALUE CHANGED DOWN. CURRENT COINVALUE AFTER CHANGE = 0.05
[0:] *** COIN VALUE CHANGED DOWN. CURRENT COINVALUE = 0.05 ***
[0:] CHANGE DOWN 1
[0:] CHANGE DOWN 5
[0:] COIN VALUE CHANGED DOWN. CURRENT COINVALUE AFTER CHANGE = 1.38777878078145E-17

我要去哪里错了?应该是一个简单的计算。非常感谢您的宝贵时间。

c# xamarin double
1个回答
0
投票

舍入设置器末尾的值以消除任何不重要的数字

  coinValue = Math.Round(coinValue, 2);
© www.soinside.com 2019 - 2024. All rights reserved.