2017-06-22 1 views
1

タイトルに記載されているように、jsonの文字列から1トンの値を引き出し、 "。" "、"で、二重に変換して追加します。ここでの異常は、文字列に2桁の数字しか含まれていないのに対し、終わりの結果は.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 

EDIT:

私はConvert.ToDecimalConver.ToDouble()からすべての計算を変更し、今では、固定されているようです。誰も2桁の数字しかないのに、他の人がなぜ働いていないのか説明できますか?

答えて

4

浮動小数点数をデシリアライズする必要があります。その場合、文字列"61241,70"はfloat値61241,69999998に変換される可能性があります。 float変数をdecimalに変更してください。

/ストア特定の小数値を表すことができないデジタルバイナリ形式でfloat(および他の浮動小数点型)ストア値は、正確にそれらの制限された精度を与えので、これが起こります。一方、decimalタイプは10進値を正確に格納します。

非常に良い説明はhereです。この問題は、具体的にはaccepted answer

+0

の2点にあります。すべての計算を 'Conver.ToDouble()'から 'Convert.ToDecimal'に変更しましたが、今修正されているようです。他の人が働いていなかった理由を説明できますか? – Nikolas

関連する問題