Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.net中将二进制32位IEEE-754浮点转换为双精度浮点_C#_.net_Node.js_Floating Point - Fatal编程技术网

C# 在.net中将二进制32位IEEE-754浮点转换为双精度浮点

C# 在.net中将二进制32位IEEE-754浮点转换为双精度浮点,c#,.net,node.js,floating-point,C#,.net,Node.js,Floating Point,我正在尝试解析.net(C#)中的一个二进制文件,其中包含32位浮点数(IEEE-754) 我需要解析这些数字,然后将这些数字存储在PovRay脚本(一个纯文本文件)中的字符串表示形式中 我在nodejs中尝试了这一点,使用了返回一个数字(双精度值)的函数 在.net中,我只找到了Bitconverter.ToSingle函数,该函数读取二进制32位,并给我一个浮点值,它的十进制精度(7)低于nodejs解析 nodejs解析提供了一个带有如下numer的povray脚本:-14.2035350

我正在尝试解析.net(C#)中的一个二进制文件,其中包含32位浮点数(IEEE-754)

我需要解析这些数字,然后将这些数字存储在PovRay脚本(一个纯文本文件)中的字符串表示形式中

我在nodejs中尝试了这一点,使用了返回一个数字(双精度值)的函数

在.net中,我只找到了Bitconverter.ToSingle函数,该函数读取二进制32位,并给我一个浮点值,它的十进制精度(7)低于nodejs解析

nodejs解析提供了一个带有如下numer的povray脚本:-14.203535079956055 而.net只给了我:-14.2035351

那么,如何在.net中将二进制32位解析为双精度,以获得更高的精度呢

[编辑]

使用taffer中的anwser:将浮点转换为双精度,然后使用“往返”格式化程序进行字符串表示


与nodejs输出相比,仍然存在微小的舍入差异,但这些差异在13-16位小数中。

您没有损失任何精度。与JavaScript不同,默认的.NET
ToString
使用常规数字格式,这可能会截断最后的数字

但是,如果您使用以下方法,则会得到准确的结果:

var d = double.Parse("-14.203535079956055");
Console.WriteLine(d.ToString("R")); // displays -14.203535079956055
编辑

在JavaScript中,没有32位浮点数类型。每个
数字都是双精度的。因此,即使使用
readFloatLE
函数,它也将被解析为32位的双精度。请参见下面的C代码,它演示了实际发生的情况:

var d = (double)float.Parse("-14.2035351");
Console.WriteLine(d.ToString("R")); // displays -14.203535079956055
或者更准确地说,如果您从字节缓冲区读取数字:

var d = (double)BitConverter.ToSingle(new byte[] { 174,65,99,193 }, 0);
Console.WriteLine(d.ToString("R")); // displays -14.203535079956055

是的,那是因为你从双人开始。我在.net:BitConverter.ToSingle中只得到了32位==4个字节==1个浮点。我同意你的答案,可能他在javascript中读取的数字是64位。