3

只是关于 JS/C# 浮点数的简单问题。我正在制作多人游戏,通常必须在客户端和服务器之间同步内容。现在的问题是,C# 浮点数和 Javascript 浮点数是相同的数据类型吗?就像,我可以发送一个给另一个,它会互相理解。我会发送带有科学记数法的浮点数,因为我认为这样会是最短和最精确的。除非你们有任何其他想法:)

提前致谢。

4

2 回答 2

7

C #doubleJavaScriptNumber是一回事,都是双精度(64 位)IEEE-754二进制浮点数(“binary64”)。(C#float只是单精度 [32 位,“binary32”],所以如果你想要 JavaScript 具有的相同功能,请使用double,而不是float。)


旁注:虽然它们是相同的数字类型,但它们各自的“到字符串”操作略有不同。例如,给定数字0.87090686143883822(实际上是0.8709068614388382201241256552748382091522216796875IEEE-754 binary64 可以容纳的最接近的值),来自 C#、JavaScript 和 Java(也使用 binary64 作为其double)的“to string”操作是:

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转换为0.870906861438838,准确地说,丢失了剩余的0.0000000000000002201241256552748382091522216796875)。C#ToString("R")包含一个不必要的附加数字。

于 2013-11-10T13:57:44.703 回答
1

我将发送带有科学记数法的花车

为什么不使用 JSON 发送数据?它工作得相当好,并且使您不必发明一种新的传输格式。

于 2013-11-10T14:06:10.417 回答