3

我正在尝试做一些我认为非常简单的事情。将 1 的值加到一个数字上。

然而,这个数字是纯文本,事情变得有点混乱。您可能会猜到,我对此很陌生。

我的目标是在现有分数上加 1 分,分数有一位小数,例如 1.3。所以加点后想要的结果是2.3。但是,我编写的当前脚本正在返回将一个点添加到小数点后第二位,我不明白为什么。

谢谢您的帮助。

var getPoints = parseInt($('.awesome-points').text(), 10).toFixed(1);
alert(getPoints);
var addPoint = 1;
var newScore = getPoints + addPoint;
$('.awesome-points').text(newScore);

标记

4

2 回答 2

9

.toFixed()返回一个字符串(参见MDN 文档),这就是getPoints + addPoint执行字符串连接而不是加法的原因。

执行添加调用该方法:

// unary + converts any numerical string to a number (no matter whether float
// or int)
var getPoints = +$('.awesome-points').text();
var newScore = getPoints + 1;
$('.awesome-points').text(newScore.toFixed(1));

或更简洁:

$('.awesome-points').text(function(i, val) {
    return (+val + 1).toFixed(1);
});

这是如何工作的:

您可以传递一个函数.text(),而不是将值传递给。将为每个选定的元素执行此函数。传递给函数的第一个参数是所选元素集中元素的索引,第二个参数是当前文本内容。返回值将设置为新的文本内容。 这是读取和写入文本内容的好方法,无需调用两次。
.text()

(+val + 1).toFixed(1)求值如下:首先val通过一元加号(+val)转换为数字,然后加一(+ 1)。.toFixed(1)在该操作的结果上调用。

+valNaN如果文本无法成功转换为数字,将返回。我认为这不会发生在你的情况下,但这可以很容易地用表达式处理

return ((+val || 0) + 1).toFixed(1); 

这意味着,如果+val计算结果为false(包括NaN),我们将0改为使用。这是 JavaScript 中的一种常见模式,另请参阅 JavaScript中的“options = options || {}”是什么意思?.

于 2012-05-12T00:00:27.570 回答
0

我想你想要的是这样的

var getPoints = $('.awesome-points').text();
//alert(getPoints);
var addPoint = 1;
var newScore = parseFloat(getPoints) + addPoint;
$('.awesome-points').text(newScore.toFixed(1));

似乎这是您的答案, toFixed() 将数值转换为字符串,因此通过在您的流程后期制作 toFixed 函数

于 2012-05-12T01:33:31.637 回答