为什么小数不能正确显示,每个toFixed(2)?

时间:2014-01-13 22:41:31

标签: javascript jquery html json

我正在设置我的库存小部件上的小数位数,因此0.199999只显示为0.19,1而显示为1.00,8.6543只显示为8.65。我的脚本有什么问题?

这是我目前所拥有的......

var rndchange = obj.ChangeRealtime;

$tr.append($('<td class="'+changeClass+'">').text(rndchange.toFixed(2)|| "--"));

这是整个剧本......

$(function () {
    $.getJSON('http://query.yahooapis.com/v1/public/yql?q=SELECT%20*%20FROM%20yahoo.finance.quotes%20WHERE%20symbol%20in(%22GCF14.CMX%22%2C%22SIF14.CMX%22%2C%22PAH14.NYM%22%2C%22PLF14.NYM%22)&format=json&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys&callback=').done(function (data) {
    console.log("data: ", data);
    console.log(data.query.results.quote);
    $.each(data.query.results.quote, function (key, obj) {
        var changeClass = '';
        var changeInPercentClass = '';
        var rndchange = obj.ChangeRealtime;
        var $tr = $('<tr/>', {
            'class': 'my-new-list'
        }).appendTo('#blk-1 table');
        $tr.append($('<td id="name" class="cells"/>').text(obj.Name.split(' ')[0] || "--"));
        $tr.append($('<td class="cells"/>').text(obj.AskRealtime || "--"));
        //$tr.append($('<td/>').text(obj.BidRealtime || "--"));

        (obj.Change.substr(0,1) === '+') ? changeClass = 'green' : changeClass = 'red';

        (obj.Change.substr(0,1) === '+') ? changeInPercentClass = 'green' : changeInPercentClass = 'red';

        $tr.append($('<td class="'+changeClass+'">').text(rndchange.toFixed(2)|| "--"));
        var re = /([+|-]\d\.\d\d\%)/gi;
        var rt = re.exec(obj.ChangePercentRealtime);
        $tr.append($('<td class="'+changeInPercentClass+'">').text( rt[0] || "--"));
      });
   });
});

这是我的小提琴:http://jsfiddle.net/thetuneupguy/JaCaH/7/

2 个答案:

答案 0 :(得分:2)

您可以使用JavaScript内置的toFixed()方法将值更改为固定的小数位数:

var n = 1;
n.toFixed(2); // 1.00

在这里,我们将值2传递给我们的toFixed()方法,告诉它我们希望结果为2位小数。

然而,问题在于它将您的数字四舍五入到最接近的值。 1.999将四舍五入为2(1.999向上舍入到2.00,而不是向下舍入为1.990,因为这只是四舍五入的工作方式):

var n = 1.99999;
n.toFixed(2); // 2.00

你的另一个例子在这里可以正常工作:

var n = 8.6543;
n.toFixed(2); // 8.65;

如果您确实希望1.99999成为1.99,请参阅此答案:Display two decimal places, no rounding

答案 1 :(得分:0)

请在此处查看:http://jsfiddle.net/thetuneupguy/JaCaH/9/

我能用这个来实现我的需要......

var change = obj.Change;
var num = parseFloat(change);
var str = num.toFixed(10);
str = str.substring(0, str.length-8);

和...

$tr.append($('<td class="'+changeClass+'">').text(str || "--"));

现在,我需要弄清楚如何在正面附加+符号。