JavaScriptからC#への数値の桁落ち
MessageRでSignalRを使用してJavaScriptとC#の間で値をシリアル化および逆シリアル化すると、C#で受信側の精度が少し低下します。 例として、値0.005をJavaScriptからC#に送信しています。逆シリアル化された値がC#側に表示されると、値が得られます0.004999999888241291。これは近いですが、正確には0.005ではありません。JavaScript側の値は、Number私が使用しているC#側ですdouble。 JavaScriptは浮動小数点数を正確に表すことができず、のような結果につながる可能性があることを読みました0.1 + 0.2 == 0.30000000000000004。私が見ている問題は、JavaScriptのこの機能に関連していると思います。 興味深いのは、同じ問題が別の方向に進んでいるとは思えないことです。C#からJavaScriptに0.005を送信すると、JavaScriptの値は0.005になります。 編集:C#からの値は、JSデバッガーウィンドウで短縮されています。@Peteが述べたように、それは正確に0.5ではない何か(0.005000000000000000104083408558)に拡張されます。これは、矛盾が少なくとも両側で発生することを意味します。 JSONシリアライゼーションには同じ問題はありません。これは、値をネイティブの数値型に解析する際に受信環境を制御する文字列を経由すると想定しているためです。 バイナリシリアル化を使用して、両側で値を一致させる方法があるかどうか疑問に思っています。 そうでない場合、これはJavaScriptとC#の間で100%正確なバイナリ変換を行う方法がないことを意味しますか? 使用されるテクノロジー: JavaScript SignalRおよびmsgpack5を使用した.Netコア 私のコードはこの投稿に基づいています。唯一の違いは、私が使用していることですContractlessStandardResolver.Instance。