Javascript数学是加入而不是添加



我正在尝试运行一些计算,但我的 1 个变量将数字连接在一起而不是将它们相加,这是我的代码:

var pdfAround = parseFloat($('#direct_size_around').val());
var qtyAround = parseFloat($('#direct_qty_around').val());
var toothSize = parseFloat($('#direct_tooth_size').val());
var gearNum = parseFloat($('#gearNum').val());
var gearRepeat = parseFloat(toothSize * gearNum).toFixed(2);
var gapAround = parseFloat((gearRepeat / qtyAround) - pdfAround).toFixed(3);
var sizeAround = parseFloat(pdfAround + gapAround);
var repeatPlus = parseFloat(gearRepeat + 0.5).toFixed(2);
var repeatMinus = parseFloat(gearRepeat - 0.5).toFixed(2);

当我得到结果时,一切似乎都是正确的,但 var sizeAround 不是,而不是 50 + 3.795 = 53.795,我得到 503.975

我对Javascript不是很好,相信我可能误解了如何使用parseFloat

此调用:

parseFloat(pdfAround + gapAround);

在解析字符串之前pdfAroundgapAround连接字符串。尝试:

parseFloat(pdfAround ) + parseFloat(gapAround);

这是因为gapAround是一个字符串,因此是串联的。您可以尝试以下

var sizeAround = pdfAround + parseFloat(gapAround);

问题在于您对toFixed()的调用

parseFloat()分析字符串并返回浮点数

toFixed()将数字转换为具有指定小数位数的字符串

因此,当您这样做时:

var gapAround = parseFloat((gearRepeat / qtyAround) - pdfAround).toFixed(3);

您正在将parseFloat((gearRepeat / qtyAround) - pdfAround)(浮点数(的结果转换为字符串,并将其存储在gapAround

这意味着:

var sizeAround = parseFloat(pdfAround + gapAround);

将是一个串联操作,而不是加法,因为pdfAround是一个浮点数,但gapAround是一个字符串。

若要解决此问题,应删除对toFixed()的所有调用:

var pdfAround = parseFloat($('#direct_size_around').val());
var qtyAround = parseFloat($('#direct_qty_around').val());
var toothSize = parseFloat($('#direct_tooth_size').val());
var gearNum = parseFloat($('#gearNum').val());
var gearRepeat = toothSize * gearNum;
var gapAround = (gearRepeat / qtyAround) - pdfAround;
var sizeAround = pdfAround + gapAround;
var repeatPlus = gearRepeat + 0.5;
var repeatMinus = gearRepeat - 0.5;

最新更新