簡體   English   中英

訪問Redis數據庫時,C#中的Convert.ToDouble沒有給出正確的答案

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM