变量类型一团糟

kyr*_*pav 1 c++ optimization arduino

为什么我在以下代码中没有得到正常结果?

void Motors::setCycleDutyA(int percentage) {
    Serial.println(percentage);
    Serial.println(pwmCycleDutyA);
    float x=percentage/100;
    Serial.print(x);
    pwmCycleDutyA = int(255*x);
    Serial.println(pwmCycleDutyA);
}
Run Code Online (Sandbox Code Playgroud)

当我调用该函数时:

Motors::setCycleDutyA(45);
Run Code Online (Sandbox Code Playgroud)

我得到这些结果:

45 255 0.000

45 0 0.000

45 0 0.000

我错过了什么?

And*_*owl 5

这里:

float x=percentage/100;
Run Code Online (Sandbox Code Playgroud)

您正在执行整数除法(因为两个操作数都是整数).这意味着0每次结果都会percentage小于100.这解释了你得到的结果.

将其更改为:

float x=percentage/static_cast<float>(100);
Run Code Online (Sandbox Code Playgroud)

或者:

float x=percentage/100.f;
Run Code Online (Sandbox Code Playgroud)