首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当比较大于1000的数时的奇数JavaScript行为

当比较大于1000的数时的奇数JavaScript行为
EN

Stack Overflow用户
提问于 2013-04-19 21:08:58
回答 2查看 463关注 0票数 1

我编写了一个javascript函数,该函数应该检查一个金额是否大于0,是否小于某个数量。例如,如果应支付的总额为$800.00,并且用户试图支付$800.00,则我希望函数首先检查所支付的金额( $1100 )是否大于0(真),并且所支付的金额也小于应支付的总额(false)。我很确定我的逻辑是好的,但是这个函数没有正常工作:

代码语言:javascript
复制
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,则该函数将正确计算,以下是控制台输出:

代码语言:javascript
复制
Is 999.00 greater than 0?: true
&&   
Is 999.00 less than or equal to 892.50?: false

所以,上面的工作很好。但是,当我给它一个大于1000的数字时,控制台将显示如下内容:

代码语言:javascript
复制
Is 1001.00 greater than 0?: true
&&
Is 1001.00 less than or equal to 892.50?: true

有谁能解释一下这件事吗?

编辑: get_amount_paying()get_amount_due()

代码语言:javascript
复制
function get_amount_due() {
    return parseFloat($("#still_due").data('amount')).toFixed(2);
}

function get_amount_paying() {
    return parseFloat($("#make_payment").val()).toFixed(2);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-19 21:18:37

您的输出给出了这样一个事实:它们是字符串--打印实际的数字类型永远不会有多余的0。打印数字时看到892.50是不可能的。

.toFixed()返回一个字符串,而不是数字btw。

它适用于> 0,因为在比较string > number时,字符串在比较之前会自动解析为一个数字。

它不适用于payment_amt <= amt_due,因为它们都是字符串,因此进行了字符串比较,没有对它们的数值进行任何分析。

试一试

代码语言:javascript
复制
function get_amount_due() {
    return parseFloat($("#still_due").data('amount'))
}

function get_amount_paying() {
    return parseFloat($("#make_payment").val())
}

不同的是删除toFixed,这在这里是无用的。

票数 4
EN

Stack Overflow用户

发布于 2013-04-19 21:12:36

你是不是在比较字符串而不是数字?那就能解释你的结果了。

试一试:

代码语言:javascript
复制
var payment_amt = parseFloat(get_amount_paying());
var amt_due = parseFloat(get_amount_due());

(参见parseFloat文档。)

编辑: toFixed()返回一个字符串-参见toFixed文档

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16113521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档