适当的解决方案
注意:我使用名称WeightInput
和HeightInput
输入,它们的类型是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")