C# 除法的細節

來源:互聯網
上載者:User

標籤:

最近在做項目時有個地方用到了機率,要計算機率自然會用到除法。我這邊機率的演算法是這樣的,從0到10000擷取個隨機數,隨機值除以10000就是機率了,但是一時大意沒注意細節,結果直接除了,如下:
            Random rdo = new Random();
int intNum = rdo.Next(0,10000);
float result = intNum / 10000;

       如果intNum是845,那麼理論上應該得到的是0.0845。可是結果卻讓我大跌眼鏡,不管怎麼算,結果都是0.0,如果不管怎麼隨機的話都是 0.0,那就失去意義了。於是百度去,原來C#的除法的精度是根據被除數來決定的,這裡的被除數是intNum,它的資料類型是整形,所以這邊除出來的結 果自然就取整了。既然這種方式不通,那就只有換種方式了,總之問題總得解決,於是我改成了下面這寫法:      

            Random rdo = new Random();
float intNum = (float)rdo.Next(0,10000);
float result = intNum / 10000;

  Ok,如願以償,得到了我想要的答案,比如intNum是845,那麼得到的結果是0.0845.C#中解決了這個問題,於是我想到了SqlServer中會不會也有這種情況,於是我試了試,如下:

select 845/10000

  查詢結果等於0,看來SQL和C#是一樣的,於是我也換了種寫法,如下:

select CONVERT(float,845)/10000

查詢結果等於0.0845,正確。 ?

C# 除法的細節

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.