JS/C# フロートに関する簡単な質問です。私はマルチプレイヤーゲームを作成しており、通常はクライアントとサーバーの間で同期する必要があります。ここで質問です。C# の float と Javascript の float は同じデータ型ですか? 同様に、私はお互いに送信できますか、それはお互いを理解します. この方法が最短で最も正確になると思うので、科学的表記法でフロートを送信します。他にアイデアがない限り:)
前もって感謝します。
JS/C# フロートに関する簡単な質問です。私はマルチプレイヤーゲームを作成しており、通常はクライアントとサーバーの間で同期する必要があります。ここで質問です。C# の float と Javascript の float は同じデータ型ですか? 同様に、私はお互いに送信できますか、それはお互いを理解します. この方法が最短で最も正確になると思うので、科学的表記法でフロートを送信します。他にアイデアがない限り:)
前もって感謝します。
C #double
とJavaScriptNumber
は同じもので、どちらも倍精度 (64 ビット) IEEE-754バイナリ浮動小数点数 ("binary64") です。( C#float
は単なる単精度 [32 ビット、"binary32"] であるため、JavaScript と同じものが必要な場合は、double
ではなくを使用しますfloat
。)
補足: これらは同じ数値型ですが、それぞれの「文字列への」操作は少し異なります。たとえば、数値0.87090686143883822
(実際0.8709068614388382201241256552748382091522216796875
には 、IEEE-754 binary64 が保持できる最も近い値) が与えられた場合、C#、JavaScript、および Java (その にも binary64 を使用) からの「文字列への」操作は次のようになりますdouble
。
0.870906861438838 - C# の ToString() 0.87090686143883822 - C# の ToString("R") 0.8709068614388382 - JavaScript の toString() 0.8709068614388382 - Java の String.valueOf(double)
C# のルールはわかりませんが、JavaScript と Java の両方のデフォルトでは、数字を最も近い表現可能な隣人から区別するために必要な数の数字のみを含めるようになっています。C#ToString()
はそうしません(正確には、残りのを失うことに0.870906861438838
変換します)。C#には、不要な追加の数字が含まれています。0.870906861438838
0.0000000000000002201241256552748382091522216796875
ToString("R")
科学表記法付きのフロートをお送りします
JSON を使用してデータを送信してみませんか? それはかなりうまく機能し、新しいトランスポート形式を発明する必要がなくなります。