舍入小数并打印零

时间:2013-11-16 11:50:18

标签: javascript jquery decimal

我想让这个脚本将值向上舍入为3位小数。(1.1234 tp 1.123等)。

但是,.toFixed(3)不能完成这项工作,因为我需要这个脚本来打印*.***格式的每个值 - 包括1和0(1.000,0.000)

.toFixed()将1.000简化为1。

小提琴: http://jsfiddle.net/EfYev/9/

$(document).ready(function () {
    var fruits = {
        apple: {
            apple: 1,
            banana: 0.5,
            pineapple: 8
        },
        banana: {
            apple: 2,
            banana: 1,
            pineapple: 16
        },
        pineapple: {
            apple: 0.125,
            banana: 0.0625,
            pineapple: 1
        }
    };

    function showTab(name) {
        $('div.fruit').hide();
        var $div = $('#' + name).show();
        var number = parseInt($('.number').val(), 0);
        $('span', $div).each(function () {
            $(this).text(($(this).data('val') * number).toFixed(3));
        });
    }

    $('.update').click(function () {
        var vals = {
            apple: 0,
            banana: 0,
            pineapple: 0
        };

        $('.dropdown').each(function () {
            var fruitVal = $(this).prev('.number').val();
            if (fruits[$(this).val()]) {
                vals.apple += fruitVal * fruits[$(this).val()].apple;
                vals.banana += fruitVal * fruits[$(this).val()].banana;
                vals.pineapple += fruitVal * fruits[$(this).val()].pineapple;
            }
        });

        $('.apple').text(vals.apple);
        $('.banana').text(vals.banana);
        $('.pineapple').text(vals.pineapple);
        $('.values').show();
    });

    showTab($('#dropdown').val());
});

1 个答案:

答案 0 :(得分:1)

你无法使用整数或浮点数在javascript中打印尾随零,你必须使用字符串并用零填充它们,例如:

var n = 1.1234,
    l = n.toString().split('.').pop().length;

n = pad( n.toFixed(3), l ); // rounds the number and pads it with zeros

function pad(numb, length) {
    numb = numb.toString();
    while(numb.split('.').pop().length < length) {
        numb = numb + '0';
    }
    return numb;
}

FIDDLE

另一种方法是利用toFixed转换为字符串的事实:

function roundWithZeros(numb, decimals) {
    var length = numb.toString().split('.').pop().length;
    numb = numb.toFixed(decimals);
    numb = (+numb).toFixed(length)
    return numb;
}

FIDDLE