【问题标题】:If function with multiple conditions doesn't return proper value如果具有多个条件的函数没有返回正确的值
【发布时间】:2021-05-14 02:07:13
【问题描述】:

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

【问题讨论】:

    标签: powerapps powerapps-canvas powerapps-formula powerapps-collection


    【解决方案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"
          )
    )
    

    谢谢大家。

    【讨论】:

      【解决方案2】:

      适当的解决方案

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

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

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

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

      Value(WeightInput.Text)
      

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

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

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

      Power(Value(HeightInput.Text),2)
      

      我将它保存到名为SquaredWeight的标签

      第 3 步:计算 BMI

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

      703*(WeightData/SquaredWeight)
      

      我将它保存为 BMI。

      第四步:返回文本值

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

      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 的值的正常

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

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

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

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

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

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

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

      if(VarResult>18.5,"Normal")
      

      【讨论】:

      • 您完全破坏了 select 语句,但您的回答并没有解决我的问题。运行您的代码后,我不断地“体重不足”以获得正确的值。此外,我正在努力改进我的计算。感谢您的协助,
      • 您是否能够隔离,解决方案的哪一部分不起作用?也许我在粘贴代码时打错了
      • 并非如此,您绝对做对了。我认为问题出在我的头上。这是我试图缩短以增强应用程序的 javascript 代码 if (bmi = 18.5 && bmi = 25 && bmi = 30) { measure = "Your BMI is " + bmi + " 这意味着 " + "You are Obese"; }
      猜你喜欢
      • 1970-01-01
      • 2021-04-20
      • 2017-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多