划分两个浮点数时出现奇怪的行为

问题描述 投票:3回答:2

我有一些在Arduino编写的ESP32上运行的代码。问题是我的结果在不应该被四舍五入的情况下被四舍五入。

float step_value = (float)abs(levels_values[i] - levels_values[i - 1]) / abs(levels_percentages[i] - levels_percentages[i - 1]);
float percentage_diff = (float)abs(current_value - levels_values[i - 1]) / step_value;

Serial.println(step_value);   
Serial.println(2.00/step_value);
Serial.println(2.00/0.07);

并且在控制台内,输出为:

0.07
30.00
28.57

为什么要除以变量,则得到一个四舍五入的值,而当除以变量的值时,得到正确的值。

levels_valueslevels_percentages向量的类型为int

c arduino esp32
2个回答
1
投票

step_value的值约为.0666667。 Serial.println(step_value)未打印完整值;将其舍入到小数点后两位小数。

[Serial.println(2.00/step_value)打印“ 30.00”,因为2.00 / .0666667约为30。

[Serial.println(2.00/0.07)打印“ 28.57”,因为2.00 / .07约为28.57。

© www.soinside.com 2019 - 2024. All rights reserved.