2017-06-22 59 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