PowerApps简易计算器多位数计算功能异常求助
解决PowerApps计算器多位数运算问题
在PowerApps中实现了具备+、-、*、/基础运算的简易计算器,UI包含label_Calculate和Calculator_Screen文本标签。当前代码仅支持个位数计算,输入两位数及以上时会出现错误:"The value '98 +' cannot be converted to a number"。原代码通过修改Len(label_Calculate.Text)-3的数值只能支持固定位数计算,现需要实现支持10位数的计算。
现有代码
=按钮代码
UpdateContext({varCalculate:varCalculate&varNumber}); Switch(varCalcType, "Plus", UpdateContext({varNumber:Text(Left(label_Calculate.Text,Len(label_Calculate.Text)-3)+Value(Calculator_Screen.Text))}), "Subtract", UpdateContext({varNumber:Text(Left(label_Calculate.Text,Len(label_Calculate.Text)-3)-Value(Calculator_Screen.Text))}), "Multiply", UpdateContext({varNumber:Text(Left(label_Calculate.Text,Len(label_Calculate.Text)-3)*Value(Calculator_Screen.Text))}), "Divide", UpdateContext({varNumber:Text(Left(label_Calculate.Text,Len(label_Calculate.Text)-3)/Value(Calculator_Screen.Text))}));
0-9按钮代码(以数字1为例)
If( varNumber = "0" || varToggle = true, UpdateContext({varNumber: "1"}), UpdateContext({varNumber: varNumber & 1}) ); UpdateContext({varToggle: false})
+按钮代码
UpdateContext({varCalculate:varNumber & " + "}); UpdateContext({varToggle:true}); UpdateContext({varCalcType:"Plus"})
问题根源
原代码通过Len(label_Calculate.Text)-3固定截取运算符前的数字,仅适用于个位数场景。当数字是多位数时,固定长度截取会获取错误内容,导致无法转换为数字,触发报错。
解决方案
1. 动态提取运算数
放弃固定长度截取,改用Split函数按空格分割label_Calculate.Text,提取运算符前的完整数字;同时限制输入数字长度不超过10位。
修改后的代码
=按钮代码
UpdateContext({varCalculate:varCalculate&varNumber}); // 提取运算符前的第一个数字 Set(varFirstNumber, Value(First(Split(label_Calculate.Text, " ")).Result)); // 获取当前输入的第二个数字 Set(varSecondNumber, Value(Calculator_Screen.Text)); Switch(varCalcType, "Plus", UpdateContext({varNumber: Text(varFirstNumber + varSecondNumber)}), "Subtract", UpdateContext({varNumber: Text(varFirstNumber - varSecondNumber)}), "Multiply", UpdateContext({varNumber: Text(varFirstNumber * varSecondNumber)}), "Divide", UpdateContext({varNumber: Text(varFirstNumber / varSecondNumber)}));
0-9按钮代码(以数字1为例,其他数字按钮同理修改)
If( varNumber = "0" || varToggle = true, UpdateContext({varNumber: "1"}), // 限制输入数字长度不超过10位 Len(varNumber) < 10, UpdateContext({varNumber: varNumber & "1"}) ); UpdateContext({varToggle: false})
说明
- 使用
Split(label_Calculate.Text, " ")分割文本后取第一个结果,能准确获取运算符前的完整数字,无论数字是1位还是10位。 - 在数字按钮代码中增加
Len(varNumber) < 10的判断,确保输入的数字不超过10位,符合需求。
内容的提问来源于stack exchange,提问作者Heena
相关产品推荐
相关产品推荐

