Matlab fwrite函数舍入数
我想将数据存储到二进制文件中(精度“long”-制造商要求),但在另一个软件中读取文件后,数字被四舍五入。我发现,当我试图在MATLAB中读回该文件时,数字也是四舍五入的。小例子: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'); &
>> 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的建议之后,写“长”数写得不好,一切都很清楚