[VBNET] DateTime.ToString 居然是無條件捨去法

以前沒注意到,一直以為 DateTime.ToString 到秒時,會跟 Single.ToString / Double.ToString 一樣自動四捨五入,今天在做誤差 20 ms 以下的整時紀錄時,才發現居然是用無條件捨去法… 下面是一堆範例,大家可以測看看。
 
函數 輸出 備註
CDate("00:00:00.999") #12:00:00 AM#  
CDate("00:00:00.9999999") #12:00:00 AM# 秒以下有效位數用藍色表示
CDate("00:00:00.99999999") #12:00:01 AM# 紅色為超出有效位數,自動四捨五入
CDate("00:00:00.99999995") #12:00:01 AM# 紅色為超出有效位數,自動四捨五入
CDate("00:00:00.99999994") #12:00:00 AM# 紅色為超出有效位數,自動四捨五入
 
從第二列可以看到即使僅差千萬分之一秒,還是用無條件捨去變成 00:00:00,只有超出有效位數才會四捨五入,但是時間誤差常常會發生在 +/- 10 ms ,如果不幸碰上 00:00:59.9999999 ,寫入資料庫時間不會是 00:01:00 ,而是變成 00:00:59 ,只好自己寫進位函數,讓他變成整數 1 分鐘寫入了。
 
廣告
Categories: 技術分享 | 發表留言

文章分頁導航

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

在 WordPress.com 建立免費網站或網誌.

%d 位部落客按了讚: