如果具有多个条件的函数没有 return 正确的值
If function with multiple conditions doesn't return proper value
我最近开始使用 Power Apps,我正在构建的第一个应用程序是体重指数 (BMI) 计算器。我能够将其设置为自动将公斤转换为磅,将厘米转换为英尺。
我现在面临的问题是使用 If
或 Switch
语句输出结果以显示 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.Text
returns文本值。我们需要使用 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"
)
)
谢谢大家
我最近开始使用 Power Apps,我正在构建的第一个应用程序是体重指数 (BMI) 计算器。我能够将其设置为自动将公斤转换为磅,将厘米转换为英尺。
我现在面临的问题是使用 If
或 Switch
语句输出结果以显示 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
andHeightInput
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.Text
returns文本值。我们需要使用 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"
)
)
谢谢大家