【问题标题】:What's wrong with this slice call in JS?JS 中的这个 slice 调用有什么问题?
【发布时间】:2019-10-31 20:21:00
【问题描述】:

我写了这行但得到一个错误的回应:

slice 无法在那里处理。

为什么以及如何解决这个问题?

function (row) {
    var r = Math.round(Object.values(row)[3] / Object.values(row)[4]);
    var t = Object.values(row)[2];
    var s = Math.round((t - r) / t * 100);
    return '<span id="up">${s.slice(0,2)}%</span>'
}

【问题讨论】:

  • slice 不是数字方法,它是 数组字符串 的方法。 Math.round 返回一个数字。
  • 请添加row 和想要的结果。
  • @borneo - 我不知道你所说的“分开数字”是什么意思。如果您想使用slice,请将数字转换为字符串(我猜这就是您想要的,而不是数组)。
  • 也许你应该使用s.toString() 而不是toString(s)...
  • 但是我怀疑你的代码在达到 100% 时是否能正常工作......那么为什么你首先只想得到 s 值的前两位数字呢?我认为这是完全没有必要的。如果s 的值不会达到 100,那么一切都应该正常(我认为)。如果它可以达到 100,您可能也应该考虑这 3 个数字(而不是显示 10% 而不是 100%)...

标签: javascript css slice


【解决方案1】:

您的变量s 是一个数字,但slice 函数需要string。解决方案是将s 转换为字符串:

const slice = `${s}`.slice(0, 2);

编辑

要显示带有小数点 n 的数字,您可以在四舍五入之前将其乘以 10^n,然后再除以相同的数字,将小数点后 n 之后的任何内容删去。

// display number with n decimals
const numberDisplay = (number, numberOfDecimals) => Math.round(number * Math.pow(10, numberOfDecimals)) / Math.pow(10, numberOfDecimals);

// your desired number display
const slice = numberDisplay(s, 2);

【讨论】:

  • 输出是-1;%。我填写的是-1,00%
  • 您能否提供ts 的示例值,以便我弄清楚您要做什么?您的要求是修复 slice 错误,我做到了。你说的是逻辑错误。
  • t 的值和 s is 后面有 8 个数字的数字,例如 4, 012301234。我想将此值限制为后面的 2 个数字。就是这样
  • 我已将您的请求添加到我的回答中
  • 如果它适合您,如果您将我的答案标记为“答案”,我会非常高兴。如果没有,我很乐意提供帮助。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2016-02-03
  • 1970-01-01
相关资源
最近更新 更多