【问题标题】:Eliminate unnecessary decimals on results of multiplication消除乘法结果中不必要的小数
【发布时间】:2013-09-26 18:24:34
【问题描述】:

我有 3 个输入,因为两个数字相乘,结果写在第三个输入上。但是,当完全没有必要时,我需要消除小数。

<input type="text" name="input1" id="input1" value="" size="4" class="inputt" />
<br>
<input type="text" name="input2" id="input2" value="" size="4" class="inputt" />
<br>
<input type="text" readonly="readonly" name="input3" id="input3" value="" size="4" class="inputt" />

例如; 150.00 应表示为 150,但 150.50 应保持原样。

而且,当在乘法之后写入结果时,我必须单击只读输入以使结果四舍五入。我需要结果编号的最终指示应该发生而不需要任何点击。为了更好地理解,将 12.5 写入第一个,12.1123 写入第二个,然后查看结果。

$(document).ready(function () { 
        $("#input1, #input2").change(function() {
$("#input3").val($("#input1").val() * $("#input2").val());

var num =$("#input3").val();
num = num.toFixed(2);
        });
    });

$( function() {
 $('#input1').keyup(function(){
   if($(this).val().indexOf('.')!=-1){         
       if($(this).val().split(".")[1].length > 2){                
           if( isNaN( parseFloat( this.value ) ) ) return;
           this.value = parseFloat(this.value).toFixed(2);
       }  
    }            
    return this;
 });
});

$( function() {
 $('#input2').keyup(function(){
   if($(this).val().indexOf('.')!=-1){         
       if($(this).val().split(".")[1].length > 5){                
           if( isNaN( parseFloat( this.value ) ) ) return;
           this.value = parseFloat(this.value).toFixed(2);
       }  
    }            
    return this;
 });
});

$('input#input3').blur(function(){
    var num = parseFloat($(this).val());
    var cleanNum = num.toFixed(2);
    $(this).val(cleanNum);

    });

这里是代码http://jsfiddle.net/mLfkd/2/

【问题讨论】:

    标签: jquery multiplication


    【解决方案1】:

    之所以需要再次点击,是因为你使用的是.blur,这只有在#input3失去焦点后才会发生。它是多余的,所以我将该部分与#input1#input2 上的.change 组合在一起,并使用modulus trick from here 检查它是否有小数位:

    $(document).ready(function () {
        $("#input1, #input2").change(function () {
            var num = parseFloat($("#input1").val()) * parseFloat($("#input2").val());
    
            if (num % 1 != 0) {
                num = num.toFixed(2);
            } else {
                num = parseInt(num);
            }
    
            $("#input3").val(num);
        });
    });
    
    $(function () {
        $('#input1').keyup(function () {
            if ($(this).val().indexOf('.') != -1) {
                if ($(this).val().split(".")[1].length > 2) {
                    if (isNaN(parseFloat(this.value))) return;
                    this.value = parseFloat(this.value).toFixed(2);
                }
            }
            return this;
        });
    });
    
    $(function () {
        $('#input2').keyup(function () {
            if ($(this).val().indexOf('.') != -1) {
                if ($(this).val().split(".")[1].length > 5) {
                    if (isNaN(parseFloat(this.value))) return;
                    this.value = parseFloat(this.value).toFixed(2);
                }
            }
            return this;
        });
    });
    

    工作小提琴:http://jsfiddle.net/FMpBz/1/

    【讨论】:

    • 很好.. 我遇到了一种情况,当我将 266 写入第一个输入并将 0.5639 写入第二个输入时,结果为 150.00。这是因为任何舍入问题吗?
    • @ctsnr 是的,toFixed 是四舍五入 (sometimes...) 如果你只是想剪掉它,试试this solutionMath.floor(num * 100) / 100
    • 听起来合乎逻辑,但我无法让它与输入 266 * 0.5639 一起工作,尽管我试图将此代码定位到可能的位置。请问可以更新小提琴吗?
    • @ctsnr Updated fiddle。更改在 js 的第 8 行。 266*0.5639 给我 149.99。
    【解决方案2】:
    var f1 = parseFloat(150.00).toFixed(2);
    var f2 = parseFloat(150.50).toFixed(2);
    
    function cut_it(a){
        var int_val =  parseInt(a); 
        var res = a / int_val ;
        if (res > 1) return a;
        return int_val;
    }
    // got the point? 
    alert ( f1 + " -> " + cut_it (f1) + ", but "+  f2 + " -> " + cut_it (f2) );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2018-11-02
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 2015-06-17
      相关资源
      最近更新 更多