小弟本想隨機生成橢圓elli,使它在Canvas中的坐標為2的倍數.
Canvas.SetLeft(elli, Math.Round((double)random.Next((int)canvas.Width / 2)) * 2);
Canvas.SetTop(elli, Math.Round((double)random.Next((int)canvas.Height / 2)) * 2);
然後判斷elli的坐標與另一個坐標是否相等,但結果總為false.後來檢查發現elli的坐標竟為{x=20, y=39.999994}之類的值.請問有什麼辦法產生完美的隨機整數呢?
問題找到了:
random本來已經產生了一個整數,但把它賦給Canvas.Left這個double類型的屬性時產生了微小的不可避免的誤差.
可以在判斷相等時使用ToString方法忽略誤差,或改用<= >=在誤差允許范圍內判斷是否相等.