C#中的四捨五入方法、C#中擷取時間戳記(UnixTime)的方法

來源:互聯網
上載者:User

  如果問C#程式員,四捨五入方法是怎麼寫的。很多人上來就會輕而易舉寫上一個Math.Round()方法。但卻不知,其中可悲的奧妙之處!

試寫出下列計算結果:

  Math.Round(0.5)
  Math.Round(1.5)

  肯定有一部分人會寫,計算結果為1和2。

  那就大錯特錯了!事實證明,這兩個運算式的結果分別為0和2!這就是很多程式的BUG所在。

  細心的程式員們可以看一下MSDN中對Math.Round(Decimal)方法的描述,其中對於傳回值的描述如下:

    傳回值

類型:System.Decimal
最接近參數 d 的整數。如果 d 的小數部分正好處於兩個整數中間,其中一個整數為偶數,另一個整數為奇數,則返回偶數。

  這就已經充分解釋了,為什麼上面的兩個運算式的傳回值分別為0和2。也證明了簡單的Math.Round(Decimal)方法無法實現四捨五入的功能!

  .NET中的Math.Round(),還提供另外一些重載方法,其中一個是Math.Round(Decimal, MidpointRounding)方法,通過這個方法,可以實現對十進位小數的四捨五入。方法如下:

    Math.Round(Decimal, MidpointRounding.AwayFromZero)

    大功告成!讓我們的程式告別BUG!

------------------------------------------------------------------------------------------------------------------------------------------

  .Net中沒有封裝擷取時間戳記(UnixTime,相對於1970年1月1日淩晨的毫秒數)的方法。因此本人寫了如下方法實現。

DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));

DateTime nowTime = DateTime.Now;

long unixTime = (long)Math.Round((nowTime - startTime).TotalMilliseconds, MidpointRounding.AwayFromZero);

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.