2017-06-22 27 views
1

正如標題中所描述的那樣,從json字符串中提取大量值,替換「。」。與「,」,將它們轉換爲雙倍並添加它們。這裏的異常似乎是,雖然字符串只包含2位數字,但endresult以.x9999999x結尾!如果您有任何修復或解釋,這是值得讚賞的。C#拉扯Json雙值加法異常?

小得多JSON實例:

{"AK-47 | Aquamarine Revenge (Factory New)":"33.74","AK-47 | Aquamarine Revenge (Minimal Wear)":"23.35", 
"AK-47 | Aquamarine Revenge (Field-Tested)":"17","AK-47 | Aquamarine Revenge (Well-Worn)":"14.5","AK-47 | Aquamarine Revenge (Battle-Scarred)":"11.7", 
"StatTrak™ AK-47 | Aquamarine Revenge (Factory New)":"123.16","StatTrak™ AK-47 | Aquamarine Revenge (Minimal Wear)":"75.84","StatTrak™ AK-47 | Aquamarine Revenge (Field-Tested)":"54.2", 
"StatTrak™ AK-47 | Aquamarine Revenge (Well-Worn)":"38.33","StatTrak™ AK-47 | Aquamarine Revenge (Battle-Scarred)":"31.24","AK-47 | Black Laminate (Factory New)":"91.3", 
"AK-47 | Black Laminate (Minimal Wear)":"9.86","AK-47 | Black Laminate (Field-Tested)":"8.11","AK-47 | Black Laminate (Well-Worn)":"9","AK-47 | Black Laminate (Battle-Scarred)":"9.3", 
"AK-47 | Bloodsport (Factory New)":"63.55","AK-47 | Bloodsport (Minimal Wear)":"55.7","AK-47 | Bloodsport (Field-Tested)":"49.35","AK-47 | Bloodsport (Well-Worn)":"48.31", 
"StatTrak™ AK-47 | Bloodsport (Factory New)":"222.89","StatTrak™ AK-47 | Bloodsport (Minimal Wear)":"182.08"} 

附加價值例如:

61241,69999998 

編輯:

我改變了所有的計算從Conver.ToDouble()Convert.ToDecimal現在看來是固定的。任何人都可以解釋爲什麼另一個不工作,雖然只有2位數字?

回答

4

您必須反序列化爲浮點數。如果是這樣,字符串"61241,70"可能會轉換爲浮點值61241,69999998。將您的float變量更改爲decimal

發生這種情況是因爲float(和其他浮點類型)以數字二進制格式存儲值,由於其精度有限,無法精確地表示/存儲某些十進制值。另一方面,decimal類型準確地存儲十進制值。

一個很好的解釋是here。這個問題也被討論here,特別是在accepted answer

+0

的第2點我將所有計算從'Conver.ToDouble()'改爲'Convert.ToDecimal',現在它似乎是固定的。你能解釋爲什麼另一個人不工作嗎? – Nikolas