只是关于 JS/C# 浮点数的简单问题。我正在制作多人游戏,通常必须在客户端和服务器之间同步内容。现在的问题是,C# 浮点数和 Javascript 浮点数是相同的数据类型吗?就像,我可以发送一个给另一个,它会互相理解。我会发送带有科学记数法的浮点数,因为我认为这样会是最短和最精确的。除非你们有任何其他想法:)
提前致谢。
只是关于 JS/C# 浮点数的简单问题。我正在制作多人游戏,通常必须在客户端和服务器之间同步内容。现在的问题是,C# 浮点数和 Javascript 浮点数是相同的数据类型吗?就像,我可以发送一个给另一个,它会互相理解。我会发送带有科学记数法的浮点数,因为我认为这样会是最短和最精确的。除非你们有任何其他想法:)
提前致谢。
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
)的“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")
包含一个不必要的附加数字。
我将发送带有科学记数法的花车
为什么不使用 JSON 发送数据?它工作得相当好,并且使您不必发明一种新的传输格式。