[英]Convert.ToDouble in c# not giving right answer when accessing redis database
我試圖將一長串數字轉換為雙精度數,以便將其用作redis數據庫的索引(redis需要雙精度數),但是轉換不正確,因此數據庫獲取變得混亂。
這是將字符串轉換為雙精度的代碼
string start="636375529204974172";
ulong istart = Convert.ToUInt64(start); // result 636375529204974172
double dstart = Convert.ToDouble(istart); // result 6.3637552920497421E+17
如您所見,當我將istart轉換為dstart的倍數時,問題開始了,某些最低有效數字被弄亂了,似乎是在轉換中引入了E + 17。
我不明白為什么,它是一個全數,沒有小數部分會產生錯誤,那么為什么它不能做到呢?
有人知道如何將字符串轉換為雙精度嗎?
我不明白為什么,它是一個全數,沒有小數部分會產生錯誤,那么為什么它不能做到呢?
因為它仍然只具有64位信息可玩,所以其中52個用於尾數,其中11個用於指數,其中1個用於符號。
基本上,您不應該依賴double
超過15個十進制數字的精度。 從System.Double
的文檔中 :
所有浮點數還具有有限數量的有效數字,這也決定了浮點值逼近實數的精度。 盡管在內部最多保留17位數字,但Double值最多具有15位精度的十進制數字。
您的值的前15個有效數字是正確的-這里沒有錯。 最近的double
價值,你的原始值恰好是636375529204974208. 沒有 double
能精確代表636375529204974172。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.