Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.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
Matlab fwrite函数舍入数_Matlab_Long Integer_Fwrite_Rounding - Fatal编程技术网

Matlab fwrite函数舍入数

Matlab fwrite函数舍入数,matlab,long-integer,fwrite,rounding,Matlab,Long Integer,Fwrite,Rounding,我想将数据存储到二进制文件中(精度“long”-制造商要求),但在另一个软件中读取文件后,数字被四舍五入。我发现,当我试图在MATLAB中读回该文件时,数字也是四舍五入的。小例子: >> number=-3.913; >> fid_out=fopen('test','wb'); >> fwrite(fid_out,number,'long'); >> fclose all; >> fid_in=fopen('test','rb'); &

我想将数据存储到二进制文件中(精度“long”-制造商要求),但在另一个软件中读取文件后,数字被四舍五入。我发现,当我试图在MATLAB中读回该文件时,数字也是四舍五入的。小例子:

>> number=-3.913;
>> fid_out=fopen('test','wb');
>> fwrite(fid_out,number,'long');
>> fclose all;
>> fid_in=fopen('test','rb');
>> fread(fid_in,'long')

ans =

    -4
对不起,我不太熟悉二进制数类型。我想使用“long”的原因是外部软件数据解码器。我得到的唯一信息是:


有什么线索吗?

您得到了一个整数,因为您正在使用
long
进行书写和阅读,这是一个32位整数。要使其工作,您需要将
long
替换为浮动类型,如
double
float

number=-3.913;
fid_out=fopen('test','wb');
fwrite(fid_out,number,'double');
fclose all;
fid_in=fopen('test','rb');
fread(fid_in,'double')
您将获得:

ans =

    -3.9130


编辑:如果您必须使用
long
,您可以首先将数字乘以一个大的刻度数字,如
1000
,使其成为
long
,同时不要失去准确性。然后,当加载回数据时,您可以通过将原始值进一步除以相同的比例来获得原始值。

请参阅我编辑的问题。类型的更改在MATLAB中有帮助,但在外部软件中没有帮助。Thanks@JakubJon我确实看到您的外部软件也支持
double
。当然,它支持。但不是这个:569897.475-3.913-0.287+8.990+0.270-0.059-0.067我得到了这个:569897.475-1065718120.00000-1097666134.00000 1091557130.00000 1049247089.00000-1116624388.00000-1115080884.00000如果你必须使用
long
,请查看更新的答案。如果我正确理解这个截图,您可能需要将第一个值作为double(Time)写入,随后的6个值作为long写入。这可以解释matlab和“译码器”(译码器)边数之间的差异,其中第一个数字被正确读取,而其余的则没有。@sebastian我试图解决这个问题,只是在herohuyongtao的建议之后,写“长”数写得不好,一切都很清楚