gpt4 book ai didi

javascript - 浮点问题。 JavaScript

转载 作者:行者123 更新时间:2023-11-28 16:10:12 25 4
gpt4 key购买 nike

基本上我的问题是:为什么我得到的值为 130.00000000000003 而不是 130.0 ?

我刚刚输出了所有内容,希望它足够清楚。我知道这很可能是字符串/ float 造成的,但我不知道如何解决它。

我尝试过 parseFloat() 、 parseFloat().toFixed(1) 、 parseFloat().round(1) 但我仍然不断得到 .00000000000003。并非总是如此,但有时如此。

代码:

// ... 'cost' will be passed as a parameter to the function 

totalBudget = parseFloat(document.getElementById('currentBudget').value);// e.g value ='4'

ni = parseFloat(totalBudget);
cost = (cost).toFixed(1);
alert("totalBudget " + totalBudget + "\nni " + ni + "\ncost " + cost);
ni += parseFloat(cost);
alert("ni " + ni);

alert('\nni= ' + ni + '\ntotalBudget= ' + totalBudget + '\ncost=' + cost);

var playerCost = parseFloat(document.getElementById('playerCost' + vTemp).value);
playerCost = (playerCost).toFixed(1);
alert('playerCost= ' + playerCost);
alert('\nNow will subtract ');
ni -= playerCost;
alert('\nAfter Subtraction');
alert('\nni= ' + ni + '\nplayerCost= ' + playerCost);


alert('-------'+
'\ncurrBudget= '+totalBudget+
'\nnew budget ni= '+ni+
'\nPlayer#:vTemp= '+vTemp+
'\nCurr player cost= '+playerCost+
'\nNew players cost= '+cost +
"\nParseFloat(playerCost)for curr player= "+parseFloat(playerCost));

输出:

 // If cost = 7.2 and playerCost= 7.1. Notice all floating values are super fine. 
totalBudget 129.8
ni 129.8
cost 7.2

totalBudget 129.8
ni 129.8
cost 7.2


ni= 137
totalBudget= 129.8
cost=7.2

plaerCost= 7.1

Now will subtract
After Subtraction


ni= 129.9
playerCost= 7.1


-------
currBudget= 129.8
new budget ni= 129.9
Player#:vTemp= 8
Curr player cost= 7.1
New players cost= 7.2
ParseFloat(playerCost)for curr player= 7.1

在不刷新页面的情况下,我在网站上进行了一些其他操作

输出:

// If cost = 7.3 and playerCost= 7.2. Notice floating points are totally not fine. 
totalBudget 129.9
ni 129.9
cost 7.3

ni 137.20000000000002

ni= 137.20000000000002
totalBudget= 129.9
cost=7.3

plaerCost= 7.2

Now will subtract

After Subtraction

ni= 130.00000000000003
playerCost= 7.2

-------
currBudget= 129.9
new budget ni= 130.00000000000003
Player#:vTemp= 8
Curr player cost= 7.2
New players cost= 7.3
ParseFloat(playerCost)for curr player= 7.2

然后我会收到“超出预算。请更换您的球员!”错误原因 130.00000000000003 > 130.0

最佳答案

也许这有点过分了,但试试 BigDecimal 。浮点不适合精确数学,并且 JavaScript 没有内置的“十进制”类型来处理它。

此外,如果精度不是那么大的问题,请尝试 toPrecision()方法。它只会剪掉你不需要的部分。

var a = 1.000000000000005;
var b = a.toPrecision(6); //returns a string
var c = parseFloat(b); //returns a number
alert(b); // shows 1.000000;
alert(c); // shows 1;

编辑:实际上你应该没问题

function roundFloat(input, prec) {
return parseFloat(input.toFixed(prec));
}

并将其用于需要四舍五入的数字。

关于javascript - 浮点问题。 JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13196704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com