我编写了一个javascript函数,该函数应该检查一个金额是否大于0,是否小于某个数量。例如,如果应支付的总额为$800.00,并且用户试图支付$800.00,则我希望函数首先检查所支付的金额( $1100 )是否大于0(真),并且所支付的金额也小于应支付的总额(false)。我很确定我的逻辑是好的,但是这个函数没有正常工作:
function validate_payment_amount() {
var payment_amt = get_amount_paying(); // 1100.00
var amt_due = get_amount_due(); // 800.00
console.log('Is ' + payment_amt + ' greater than 0?: ' + (payment_amt > 0));
console.log('&&');
console.log('Is ' + payment_amt + ' less than or equal to ' + amt_due + '?: ' + (payment_amt <= amt_due));
return payment_amt > 0 && payment_amt <= amt_due;
}如果payment_amount小于1000,则该函数将正确计算,以下是控制台输出:
Is 999.00 greater than 0?: true
&&
Is 999.00 less than or equal to 892.50?: false所以,上面的工作很好。但是,当我给它一个大于1000的数字时,控制台将显示如下内容:
Is 1001.00 greater than 0?: true
&&
Is 1001.00 less than or equal to 892.50?: true有谁能解释一下这件事吗?
编辑: get_amount_paying()和get_amount_due()
function get_amount_due() {
return parseFloat($("#still_due").data('amount')).toFixed(2);
}
function get_amount_paying() {
return parseFloat($("#make_payment").val()).toFixed(2);
}发布于 2013-04-19 21:18:37
您的输出给出了这样一个事实:它们是字符串--打印实际的数字类型永远不会有多余的0。打印数字时看到892.50是不可能的。
.toFixed()返回一个字符串,而不是数字btw。
它适用于> 0,因为在比较string > number时,字符串在比较之前会自动解析为一个数字。
它不适用于payment_amt <= amt_due,因为它们都是字符串,因此进行了字符串比较,没有对它们的数值进行任何分析。
试一试
function get_amount_due() {
return parseFloat($("#still_due").data('amount'))
}
function get_amount_paying() {
return parseFloat($("#make_payment").val())
}不同的是删除toFixed,这在这里是无用的。
发布于 2013-04-19 21:12:36
你是不是在比较字符串而不是数字?那就能解释你的结果了。
试一试:
var payment_amt = parseFloat(get_amount_paying());
var amt_due = parseFloat(get_amount_due());(参见parseFloat文档。)
编辑: toFixed()返回一个字符串-参见toFixed文档。
https://stackoverflow.com/questions/16113521
复制相似问题