代码之家  ›  专栏  ›  技术社区  ›  Jakub Jon

fwrite函数舍入数

  •  -1
  • Jakub Jon  · 技术社区  · 10 年前

    我想将数据存储到二进制文件中(精度“长”-制造商要求),但在另一个软件中读取文件后,数字被舍入。我发现,当我试图在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”的原因是外部软件数据解码器。我得到的唯一信息是:

    enter image description here

    什么线索?

    1 回复  |  直到 10 年前
        1
  •  1
  •   herohuyongtao    10 年前

    你得到了四舍五入的数字,因为你正在使用 long ,是32位整数。要使其工作,您需要更换 长的 通过浮动类型,如 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 使其成为 长的 同时不要失去准确性。然后,当加载回数据时,您可以通过将它们进一步除以相同的比例来获得原始值。