JavaScript - 错误的浮点值比较

时间:2018-05-13 13:31:29

标签: javascript forms

有两个字段 - faceValue fv2和askPrice num2 - 而且askPrice不能超过faceValue。

检查几乎正常,但面值为10.00时,警报仅在要价为1.00(9.00,8.00等等触发它时)时触发。但是,当fv2重新加载到表格时它是正确的 - 10.00。

如何解决此问题?这是代码

            // new askingPrice comparison

            var fv2 = parseFloat($('.ticketFaceValue').val()).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,');
            var num2 = parseFloat($(this).val()).toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,');

            if (num2 < fv2) {
            alert('Sorry, your asking price can\'t be less than face value. Please change your asking price.');

            $(this).val(fv2);
            row.find('.askingPriceData').html(fv2);
            recalculateFees();
          }

            // end new askingPrice comparison

1 个答案:

答案 0 :(得分:0)

虽然您使用parseFloat将输入字符串转换为数字类型,但您将其转换回toFixed字符串,因此比较是基于字符的,而不是数值。

您尝试使用replace(添加数千个分隔符)的操作也可以使用toLocaleString完成,但您需要注意不要将格式化的字符串放回input 1}}元素,因为它不会解析为数字。对数值和格式化值使用单独的变量可能更好。也许是这样的:

var fv2 = +$('.ticketFaceValue').val()
var num2 = +$(this).val();
var fv2Fmt =fv2.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});
var num2Fmt =num2.toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2});

if (num2 < fv2) {
    alert('Sorry, your asking price can\'t be less than face value. Please change your asking price.');

    $(this).val(fv2);
    row.find('.askingPriceData').html(fv2Fmt);
    recalculateFees();
}