如果具有多个条件的函数不返回正确的值



我最近开始使用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"))

感谢您对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"
)
)

谢谢大家。

正确的解决方案

注意:我使用名称WeightInputHeightInput为我的输入,它们的类型是文本输入。如果您的配置不同,您可以修改您的公式以获得正确类型的值。

注意为了使这个过程更清晰,我将为每一步使用单独的label元素。然后我将通过标签的名称访问前一步的值。

步骤1:获取weight作为number

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

Value(WeightInput.Text)

我把它保存到标签名为WeightData

步骤2:获取高度

的平方值我们已经知道如何得到number。让我们在添加Power()函数时重复相同的操作(在这种情况下指数值将为2):

Power(Value(HeightInput.Text),2)

保存到标签SquaredWeight

步骤3:计算BMI现在我们可以使用我们保存的标签来计算BMI值:

703*(WeightData/SquaredWeight)

我保存为BMI。

步骤4:返回文本值

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

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")

然后你试着将它与number value进行比较:

if(VarResult>18.5,"Normal")

相关内容

  • 没有找到相关文章

最新更新