意外的javascript响应
这是我的代码首先意外的javascript响应,javascript,Javascript,这是我的代码首先 $(function() { var fee_percent = parseFloat('<?php echo $gateway["gateway_fees"]; ?>'); var fee_fixed = parseFloat('<?php echo $gateway["gateway_fixed_fees"]; ?>'); var min = parseFloat('<?php echo $gateway["min_in
$(function() {
var fee_percent = parseFloat('<?php echo $gateway["gateway_fees"]; ?>');
var fee_fixed = parseFloat('<?php echo $gateway["gateway_fixed_fees"]; ?>');
var min = parseFloat('<?php echo $gateway["min_invest_limit"]; ?>');
var max = parseFloat('<?php echo $gateway["max_invest_limit"]; ?>');
$("#amountId").on('change keyup keydown', function() {
var $this = $(this);
var val = parseFloat($this.val());
val = val.toFixed(5);
var valid = true;
var fee = parseFloat(val * fee_percent / 100) + fee_fixed;
fee = fee.toFixed(5);
var final_amount = val - fee;
final_amount = final_amount.toFixed(5);
console.log("value: " + val);
console.log("fee: " + fee);
console.log("final: " + final_amount);
console.log("min: " + min.toFixed(5));
console.log("max: " + max.toFixed(5));
if(val <= 0 || isNaN(val) || fee > val || val < min.toFixed(5) || val > max.toFixed(5)) fee = final_amount = 0;
$("#depositFee").html(fee);
$("#depositAmountFinal").html(final_amount);
});
});
$(函数(){
风险值费用百分比=浮动汇率(“”);
var费用固定=浮动(“”);
var min=parseFloat(“”);
var max=parseFloat(“”);
$(“#amountId”).on('change keyup keydown',function()){
var$this=$(this);
var val=parseFloat($this.val());
val=val.toFixed(5);
var valid=true;
风险值费用=浮动(价值*费用百分比/100)+固定费用;
费用=固定费用(5);
var最终金额=val-费用;
最终金额=最终金额。固定(5);
console.log(“值:+val”);
控制台日志(“费用:”+费用);
控制台日志(“最终:+最终金额”);
控制台日志(“min:+min.toFixed(5));
console.log(“max:+max.toFixed(5));
如果(val val | | valmax.toFixed(5))费用=最终金额=0;
$(“#存款费”).html(费用);
$(“#存款金额最终”).html(最终金额);
});
});
现在我的问题是,
val>max.toFixed(5)
这总是返回TRUE
以下是控制台响应:
价值:11.00000
费用:0.46000
决赛:10.54000
最低:10.00000
最高:10000.00000
那么这个值是11,最大值是10000,那么为什么它是假的呢
如果不清楚,请询问,谢谢
更新:当我键入10、100或1000等时,它工作正常
如果我不使用
max.toFixed(5)
,而是只使用max
,一切正常,但当我在最后键入一些值5时,如55、65、75等,条件再次变为真,应返回假。如果我理解您的意思正确:
val = 11;
max = 10000;
if(val > max)
if(11 **is greater than** 10000)
它应该返回false。11不大于10000。
toFixed
返回字符串
因此,“11”>“10000”
返回您的true
,因为。1后跟1大于1后跟0
您可以在控制台中尝试:
“01”>“0001”
将返回同样基于相同概念的true
要避免它:
parseFloat(val) > parseFloat(max.toFixed(5))
11小于10000,因此应返回false。确实不想使用<运算符?11始终小于10000。那么它应该只返回false。很抱歉,这是我的错误,事实上条件在这一点上返回true,但事实上这是不正确的,所以我说false。@mohamedrias:
“11”>“10000”
:-)@mohamedrias好的,我举个例子,现在告诉我,这个条件是否有效<代码>费用=最终金额=0代码>,这是来自if条件块,所以如果值为11,最大值为10000,费用=最终金额=0代码>是否应该运行?据我说,没有,但实际上它运行,这是我的问题。它应该是一个comment@mohamedrias真的很好奇,为什么?很多时候,我问过一个问题,问题是简单的语法错误或对我自己的代码的误解,在那里人们发布了我已经接受的答案。我理解。我认为OP最初的问题可能不同。因为很明显,11>10000总是错误的。所以只提到。但很高兴看到你在那里解释。保持up@Matt这根本不是语法错误,我正在尽一切可能测试我的代码,我希望你再次阅读我的问题,然后看看你是否能帮我解决这个问题。@Matt你在回答中说的是正确的,应该返回false,但返回true。这似乎是真的,但解决方案是什么?更新的答案。parseFloat和Check这是因为解释器试图将两个操作数类型转换为同一类型。当它只有5岁时,它把“11000”转换成了数字。但当它变为55时,它将其转换为字符串。请注意,在您的案例中,val有.toFixed。是这样,;我已经试过parseFloat了,但是看到我问题的最后一部分,我更新了,当我使用parseFloat时会发生这种情况,当我键入545或555时它工作,但当我键入565或575时,再次返回true。不,当对两个操作数都使用parseFloat时,它工作正常。我测试了不同的组合。