当前位置: 首页 > 知识库问答 >
问题:

浮点和整数之和返回不寻常的小数点js[重复]

蒋嘉实
2023-03-14

我为我的某个项目写了一段代码,其中我添加了几个数字。在这个过程中,我从数组中添加整数和浮点数。直到数组的最后一个元素,总和有适当的小数位数。但是在最后一个元素,总和突然给了我很多小数位。与前一个总和相加的数字和总和本身的小数位数少于3位,但最终总和的小数位数超过3位。这是代码。它在JS。

function checkCashRegister(price, cash, cid) {
  var change = 0, cidSum = 0;
  change = cash - price;
  console.log(change);
  console.log(cid.length);
  for ( var i = 0; i < cid.length; i++ ){
    console.log("number " + cid[i][1]);
    cidSum += cid[i][1];
    console.log("sum " + cidSum);
  }
  console.log(cidSum);
  // Here is your change, ma'am.
  return change;
}

// Example cash-in-drawer array:
// [["PENNY", 1.01],
// ["NICKEL", 2.05],
// ["DIME", 3.10],
// ["QUARTER", 4.25],
// ["ONE", 90.00],
// ["FIVE", 55.00],
// ["TEN", 20.00],
// ["TWENTY", 60.00],
// ["ONE HUNDRED", 100.00]]

checkCashRegister(19.50, 20.00, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.10], ["QUARTER", 4.25], ["ONE", 90.00], ["FIVE", 55.00], ["TEN", 20.00], ["TWENTY", 60.00], ["ONE HUNDRED", 100.00]]);

这是结果

0.5
9
number 1.01
sum 1.01
number 2.05
sum 3.0599999999999996
number 3.1
sum 6.16
number 4.25
sum 10.41
number 90
sum 100.41
number 55
sum 155.41
number 20
sum 175.41
number 60
sum 235.41
number 100
sum 335.40999999999997
335.40999999999997

如你所见235.41和100的总和335.4099999...我知道我可以用固定函数来完成它。然而,我想知道为什么会这样。

如果我的英语不好,或者我问了一个愚蠢的问题,请原谅,我是来自第三世界国家的初学者,只是想学习。

共有1个答案

督飞鸣
2023-03-14
let x = 0.1 + 0.2; // 0.30000000000000004
x = parseFloat(x.toFixed(2)); // Number of places, rounded.
console.log(x); // 0.3
 类似资料:
  • 有可能有一个返回整数或浮点的函数吗?如果可能的话,我想把这两个函数合二为一:

  • 问题内容: 我似乎在使用浮点数时失去了很多精度。 例如,我需要求解一个矩阵: 这是我用来从文本文件导入矩阵的代码: 我需要使用gauss-seidel进行求解,因此需要重新排列x,y和z的方程式: 这是我用来重新排列方程式的代码。是系数矩阵,是答案向量: 但是,我得到的答案并不精确到小数位。 例如,从上面重新排列第二个方程式后,我应该得到: 我得到的是: 这看起来似乎不是一个大问题,但是当您将数字

  • 问题内容: 有人可以解释一下吗(直接来自文档-强调我的): math.ceil(x) 以浮点数形式 返回 x 的上限,最小 整 数值大于或等于x。 math.floor(x) 以浮点数形式 返回 x 的下限,即小于或等于x的最大 整 数值。 为什么会和回报花车当它们被定义应该算整数? 编辑: 好吧,这有一些很好的论据来说明为什么它们 应该 返回浮点数,而当@jcollado指出它们实际上 _确实_

  • 问题内容: 我有以下代码 这是输出 现在我意识到float和int是不同的,但是考虑到四舍五入,我本来希望两个值匹配。我已经通过强制转换为int解决了它。 所以我的问题是,为什么这个比较不能像我期望的那样工作(两个值都匹配)? 问题答案: 请注意PHP手册中的 红色大警告 ! 比较浮点数时不要指望任何东西。即使精度为0,舍入结果仍然是浮点数。在您的特定情况下,碰巧结果要比预期的大一点,因此强制转换

  • 问题内容: 和数据类型之间的区别是什么,应在哪种情况下使用? 对于任何类型的金融交易(例如,薪水领域),首选哪种交易,为什么? 问题答案: 仅当十进制(最多38位)提供的精度不足时才使用浮点或实数数据类型 近似数字数据类型不能存储为许多数字指定的确切值;他们存储的值非常接近。(Technet) 避免在WHERE子句搜索条件中使用浮点或实数列,尤其是=和<>运算符(Technet) 因此通常来说,因

  • 我需要一个regex来匹配这两个整数值和浮点数(而浮点数有一个“.”作为分离器)。这些数字总是在一个括号中,可能有一个前导的“+”。 什么应该是有效的: null 什么应该是无效的: 1.0---因为没有括号 5---因为没有括号 (1,5)---becaue“,”而不是“.” (a)---因为不是一个数字 (1.5)--因为不仅仅是一个数字 (1+5)---因为...嗯...只是失败了 [5]-