从blender导出float并读取c错误的值

时间:2015-03-01 04:39:51

标签: python c

我正在使用python从Blender编写浮点值,然后在C中读取。 对于某些值,我得到0。 如果我用2.3或其他随机数字替换这些值它是有效的。 我正在使用struct.pack("<ffff")来编写它们。

以下是不起作用的示例值:

-8.881784197001252e-16, -1.700029006457271e-15, 6.106226635438361e-16, 1.0

当我在十六进制编辑器中打开文件时,我找到了正确的编号-8.88178E-16

如何阅读正确的值?

这是python示例:

#!/usr/bin/python

import struct

f = open("test.f", "wb")

f.write(struct.pack("<f", -8.881784197001252e-16))
f.write(struct.pack("<f", 123.0324))

然后是C:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    FILE *file = fopen("test.f", "rb");
    float test = 0;

    fread(&test, sizeof(float), 1, file);
    printf("a ='%f'\n", test);

    fread(&test, sizeof(float), 1, file);
    printf("b ='%f'\n", test);

    return 0;
}

我得到的C输出是:

a ='-0.000000'
b ='123.032402'

1 个答案:

答案 0 :(得分:0)

OP需要使用指数表示法格式打印在C中读取的数字,以清楚地看到有效数字。

// printf("a ='%f'\n", test);
printf("a ='%e'\n", test);

// or to print with enough distinguishing significance for all float
#include <float.h>
printf("a ='%.*e'\n", FLT_DECIMAL_DIG - 1, test);