如何解决结果始终不是数字
我对以下代码有疑问。当我为代码提供合适的整数和字符串值时,结果始终不是数字。我尝试将整数与* 1相乘,还尝试将整数var解析为int,但没有任何效果。
module.exports = async function CalculateUV(context,req) {
context.log('JavaScript HTTP trigger function processed a request.');
const stringA = (req.query.stringA || (req.body && req.body.stringA));
const stringB = (req.query.stringB || (req.body && req.body.stringB));
const stringC = (req.query.stringC || (req.body && req.body.stringC));
var integerA = (req.query.integerA || (req.body && req.body.integerA));
var integerB = (req.query.integerB || (req.body && req.body.integerB));
var integerC = (req.query.integerC || (req.body && req.body.integerC));
var integerD = (req.query.integerD || (req.body && req.body.integerD));
var result;
if (stringA == 'hello' && stringB == 'world') {
switch (stringC) {
case 'one':
result = 0;
break;
case 'two':
result = (integerA + integerB) * (+integerD / 100);
break;
case 'three':
result = (integerA + integerB) * (intergerD / 100);
break;
case 'four':
result = (integerC) * (integerD / 100);
break;
default:
result = 0;
}
}
else {
result = 'Error';
}
context.res = {
// status: 200,/* Defaults to 200 */
body: 'The result value is:' + result
};
}
解决方法
执行此操作:
结果=(+ integerA + + integerB)*(integerD / 100); 休息;
或者,
结果= 在加法过程中使用数字字符串时需要小心。即使您在查询中输入了数字值,Req.query也是一个字符串。 这就是为什么要使用NaN的原因,因为您是在将字符串与数字相乘。
其他运算符(*,/,-),请勿执行此操作。因此,无需为他们这样做。
,req.query.x始终是一个字符串(因为它是从url导出的)。您需要将其解析为Int:
function CalculateUV (req) {
const stringA = (req.query.stringA || (req.body && req.body.stringA));
const stringB = (req.query.stringB || (req.body && req.body.stringB));
const stringC = (req.query.stringC || (req.body && req.body.stringC));
var integerA = (parseInt(req.query.integerA,10) || (req.body && req.body.integerA));
var integerB = (parseInt(req.query.integerB,10) || (req.body && req.body.integerB));
var integerC = (parseInt(req.query.integerC,10) || (req.body && req.body.integerC));
var integerD = (parseInt(req.query.integerD,10) || (req.body && req.body.integerD));
var result;
if (stringA == 'hello' && stringB == 'world') {
switch (stringC) {
case 'one':
result = 0;
break;
case 'two':
result = (integerA + integerB) * (+integerD / 100);
break;
case 'three':
result = (integerA + integerB) * (integerD / 100);
break;
case 'four':
result = (integerC) * (integerD / 100);
break;
default:
result = 0;
}
} else {
result = 'Error';
}
const res = {
body: 'The result value is:' + result
};
console.log(res);
}
const req = {
query: {
stringA: 'hello',stringB: 'world',stringC: 'three',integerA: '1',integerB: '2',integerC: '3',integerD: '4',},body: {
stringA: 'four',stringB: 'five',stringC: 'six',integerA: 5,integerB: 6,integerC: 7,integerD: 8,}
CalculateUV(req);
请注意,如果parseInt(req.query.integerX,10)返回0
,它将被视为false,并且var integerX将计算表达式的第二部分(在||
之后)
PS:您在case 'three'
中有一个错字,intergerD
应该是integerD
。
var integerA = (req.query.integerA || (req.body && req.body.integerA));
var integerB = (req.query.integerB || (req.body && req.body.integerB));
var integerC = (req.query.integerC || (req.body && req.body.integerC));
var integerD = (req.query.integerD || (req.body && req.body.integerD));
用波纹管替换上面的行
var integerA = parseInt(req.query.integerA || (req.body && req.body.integerA));
var integerB = parseInt(req.query.integerB || (req.body && req.body.integerB));
var integerC = parseInt(req.query.integerC || (req.body && req.body.integerC));
var integerD = parseInt(req.query.integerD || (req.body && req.body.integerD));
也请像下面的波纹管一样删除integerD之前的+
result = (integerA + integerB) * (integerD / 100);
现在应该可以正常工作
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。