1

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

我现在面临的问题是使用IforSwitch语句输出结果以显示 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"))
4

2 回答 2

1

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

谢谢你们。

于 2021-02-11T11:01:05.260 回答
0

适当的解决方案

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

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

第 1 步:以数字形式获取重量

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

Value(WeightInput.Text)

我将它保存到名为WeightData.

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

我们已经知道如何获取号码。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"
)

注意条件的顺序。如果您以另一种方式执行此操作,您将收到所有大于 18.5 的值的Normal 。

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

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

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

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

通过混合值来显示我的意思。在这里,您将描述性值保存到变量:

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

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

if(VarResult>18.5,"Normal")
于 2021-02-10T14:16:48.693 回答