fwrite函数舍入数字

时间:2014-02-12 13:59:24

标签: matlab long-integer fwrite rounding

我想将数据存储到二进制文件中(精确'长' - 制造商的要求)但在读取另一个软件中的文件后,数字是四舍五入的。我发现当我尝试在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 个答案:

答案 0 :(得分:1)

你得到四舍五入的数字是因为你正在使用long编写和阅读,这是一个32位整数。要使其有效,您需要使用longdouble等浮动类型替换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,同时不要失去准确性。然后,当重新加载数据时,您可以通过进一步将它们除以相同的比例来获得原始值。