我想将数据存储到二进制文件中(精度“长”-制造商要求),但在另一个软件中读取文件后,数字被舍入。我发现,当我试图在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位整数。要使其工作,您需要更换 长的 通过浮动类型,如 double , float 等
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
编辑: 如果您必须使用 长的 ,您可以先将数字乘以一个大比例的数字,例如 1000 使其成为 长的 同时不要失去准确性。然后,当加载回数据时,您可以通过将它们进一步除以相同的比例来获得原始值。
1000