如果具有多个条件的函数没有 return 正确的值

If function with multiple conditions doesn't return proper value

我最近开始使用 Power Apps,我正在构建的第一个应用程序是体重指数 (BMI) 计算器。我能够将其设置为自动将公斤转换为磅,将厘米转换为英尺。

我现在面临的问题是使用 IfSwitch 语句输出结果以显示 BMI 类别:

BMI Categories:
Underweight = <18.5
Normal weight = 18.5–24.9
Overweight = 25–29.9
Obesity = BMI of 30 or greater

我打算使用的公式是

BMI = 703* (weight/(Height^2))

这是我使用的逻辑

Set(VarResult,If(tx1.Text/(tx2.Text^2)*703)=<18.5,"underweight")
if(VarResult>18.5,"Normal")
if(VarResult>=24.5,"Overweight")
if(VarResult>30, "Obese"))

正确的解决方案

NOTE: I'm using names WeightInput and HeightInput for my inputs, Their type is Text input. If your configuration is different, you might amend your formula to get value with proper type.

NOTE: To make the process clear, I'll use separate label element for each step. Then I'll be accessing the value of previous step by the name of the label.

第 1 步:获取权重作为数字

公式WeightInput.Textreturns文本值。我们需要使用 Value() function 将其转换为数字:

Value(WeightInput.Text)

我保存到名为WeightData的标签中。

第 2 步:获取身高的平方值

我们已经知道如何获取号码了。让我们通过添加 Power() function(在这种情况下指数值为 2)来重复相同的操作:

Power(Value(HeightInput.Text),2)

我将其保存到名为 SquaredWeight

的标签中

第 3 步:计算 BMI

现在我们可以使用我们保存的标签并计算 BMI 值:

703*(WeightData/SquaredWeight)

我将其保存为 BMI。

第 4 步:Return 文本值

现在,让我们创建另一个包含文本值的标签:

If(
    Value(BMI.Text) > 30,
    "Obese",
    Value(BMI.Text) >= 24.5,
    "Overweight",
    Value(BMI.Text) > 18.5,
    "Normal",
    Value(BMI.Text) < 18.5,
    "underweight"
)

注意条件的顺序。如果您以其他方式进行操作,您将收到 Normal 所有大于 18.5 的值。

这是因为在 If 函数中,第一个条件评估为 true 会停止函数的执行

为什么现有的解决方案不起作用

我发现现有代码几乎没有问题。如果您按照上述步骤进行操作,可以很容易地注意到它们中的大多数,但我认为指出它们可能会更好:

  • 没有从文本到数字的转换
  • 多条件使用不正确If
  • 将数值与描述值混合

通过混合值来显示我的意思。此处将描述性值保存到变量:

Set(VarResult,If(tx1.Text/(tx2.Text^2)*703)=<18.5,"underweight")

稍后您尝试将其与数值进行比较:

if(VarResult>18.5,"Normal")

感谢您协助if语句,错误是解决if语句后的计算。 正确的逻辑是

With(
    {res:Value(tx1.Text)/(Value(tx2.Text)^2)*10000},
     If(
        res>= 30, "Obese",
        res> 25 && res< 29.9, "Overweight",
        res> 18.5 && res< 24.9, "Normal",
        res<= 18.4, "Underweight"
      )
)

谢谢大家