保证int32_t和float之间的数据保留?

BTa*_*les 4 c arduino avr-gcc

我正在阅读演示板(特别是DC21561A)提供的代码,并发现以下代码片段:

int32_t min_current_threshold_code;                                                                                                                                                                                                          
min_current_threshold_code = (min_current_threshold / LTC2946_DELTA_SENSE_lsb) * resistor;                                                                                                                                                   
ack |= LTC2946_write_16_bits(LTC2946_I2C_ADDRESS, LTC2946_MIN_DELTA_SENSE_THRESHOLD_MSB_REG, (min_current_threshold_code << 4));
Run Code Online (Sandbox Code Playgroud)

在这里,第一次分配的RHS上的所有内容都是浮动的。根据我的判断,经过测试,使用LHS int32_t和RHS float的赋值将舍弃float的十进制位,仅保留整数;即“ 1.5 * 3.5 = 5”。

上面的数据通过I2C写入寄存器。我假设使用浮点数可以更准确地估算阈值。但是,我想知道将浮点数分配给int32_t时是否需要C(或C ++)标准或某些特定于编译器的截断?

编辑**有些人要求输入更多代码。虽然我的问题得到了回答,但这里是为了彻底。

在文件的顶部

float min_current_threshold = read_float();

const float LTC2946_DELTA_SENSE_lsb = 2.5006105E-05;

const浮动电阻= .02;

the*_*bee 6

是的,该标准要求截断,例如在C99第6.3.1.4章第1段中:

当实数浮点型的有限值转换为_Bool以外的整数类型时,小数部分将被丢弃(即,该值将被截断为零)。