【问题标题】:Why is one form input constantly being treated as a string? [duplicate]为什么一个表单输入总是被视为字符串? [复制]
【发布时间】:2019-08-04 22:38:55
【问题描述】:

这是一个非常基本的SIP 计算器,不应超过 5 行。但是可变数量一直被视为string。我必须继续使用parseFloat() 并声明三个额外的变量来存储最终值,然后再返回它们以使代码正常工作。有什么解决办法吗?

function sipCalculator(amount, r, n) {
  r = r / 12;
  amount = parseFloat(amount);
  var temp = 0;
  for (var i = 0; i < n; i++) {
    temp += amount;
    temp += (temp * (r / 100));
  }
  var x = amount * n;
  var y = parseFloat(temp.toFixed(2));
  var z = parseFloat((y - x).toFixed(2));
  return [x, y, z];
};

【问题讨论】:

标签: javascript


【解决方案1】:

.toFixed(2) 的调用正在将数字转换为字符串。如果您希望它们是数字,同时将它们限制为小数点后两位,那么parseFloat(num.toFixed(2)) is the recommended approach(您已经在这样做了)。

这是 MDN 在 Number.prototype.toFixed 上的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed


如果您只是不喜欢parseFloat 的冗长,you can use + instead 将字符串转换为数字。 当然这不是最好的主意,因为不是每个人都知道它的作用。

var x = 1.44444;
console.log(+x.toFixed(2));

【讨论】:

  • 所以我已经在做的事情没有错吗?我想这是我用来获取数据的输入标签的问题。
  • @Tethys_94 是的,有点。基本上,当您读取文本输入的值时,它始终是一个字符串。所以要得到一个号码,你必须使用parseFloat.toFixed 也是如此。只要是要求就没有错。
  • 您不能存储带有 2 个小数位的数值。该数字总是四舍五入(有一些例外)到最接近的可能值。例外是像 0.50 0.25 0.125 0.375 这样的数字。这就是 toFixed() 返回一个字符串的原因。
  • @wimm 我不明白你在这个问题的上下文中的意思。 OP 没有问 为什么 toFixed 返回一个字符串。
猜你喜欢
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 2012-10-30
  • 2011-01-13
  • 2013-10-21
相关资源
最近更新 更多