【问题标题】:How to convert single digit integer into double digit [Javascript]如何将一位整数转换为两位数 [Javascript]
【发布时间】:2020-05-25 10:47:48
【问题描述】:

我想将1,2,3,..9,10,11,12...24 转换为01,02,03,...09,10,11,12,...24。我尝试了这些解决方案。这些都没有解决我的目的:

  1. How to format numbers by prepending 0 to single-digit numbers?
  2. How to output numbers with leading zeros in JavaScript [duplicate]
  3. How can I pad a value with leading zeros?

我正在开发一个 Angular 项目,并且正在 Typescript 中进行。这是我的代码:

monthpikcer.component.ts

monthSlice() {
    let monthStartingIndex = 0;
    monthStartingIndex = ("0" + monthStartingIndex).slice(-2); //error
    let monthEndingIndex = 24;
    for(monthStartingIndex =0; monthStartingIndex < monthEndingIndex; monthStartingIndex++) {
    ...
    } 
}

但是对于monthStartingIndex = ("0" + monthStartingIndex).slice(-2) 行,我得到一个错误:

类型“字符串”不可分配给类型“数字”。

我希望它是01, 02, 03...10,11,12,13...24。请告诉我如何在不更改变量数据类型的情况下做到这一点,因为稍后我必须对它们进行一些算术运算。

【问题讨论】:

  • 据我所知,大多数语言不允许数字以 0 开头,因为两种方式的算术结果都是相同的
  • 不改变数据类型是不行的。 '01' ... '09' 是字符串,如果你 parseInt('01') 那么你会有一个数字,console.log(01) 将输出为1。您不能在单个数字前写零。
  • 数字没有格式,只有一个值。不管你写120xC0.12e2 还是0b1100。都是一样的值。所以用数字工作!仅在渲染它们时格式化它们。我不知道你使用的是哪个 Angular 版本,我也没有使用 Angular.io 的经验,但是在 angularjs 中你可以编写一个过滤器来完成这样的工作。
  • @Tanzeel 您可以在有或没有前导 0 的情况下进行计算,答案永远不会改变。对于表示,您可以使用字符串来做到这一点,所有答案都显示了一种或另一种方式来做到这一点
  • 旁注 @ellipsis:JS 允许您编写带有前导零的数字。但它们是一个真正的问题,因为 sometimes 它们将被解释为八进制而 sometimes 被解释为十进制;和 Tanzeel 他们仍然不保留前导零,因为它只是另一种写入值的方式。

标签: javascript typescript


【解决方案1】:

你不能在一个数字前面加上一个 0,而不把它变成一个字符串。

两者都做:

(5).toString().padStart(2,0);  // returns "05"

【讨论】:

  • 但我必须对它们进行一些算术运算:-(
  • @Tanzeel 先做算术,只有在你准备好输出到某个地方时才将其转换为字符串。
【解决方案2】:

试试这样的:

function convert(n) {
  n = String(n)
  if (n.length == 1)
    n = '0' + n
  return n
}

convert(0) //  -> "00"
convert(1) //  -> "01"
convert(9) //  -> "09"
convert(14) // -> "14"
convert(20) // -> "20"

【讨论】:

    【解决方案3】:

    我没有太多使用 TypeScript,但由于它是强类型的,并且您最初将 monthStartingIndex 声明为数字,我认为这是导致错误的原因。你可以试试下面的吗?

    此外,sn-p 并没有真正意义,因为您要转换为字符串,然后将其用于迭代。也许你想在 for 循环中这样做?

    monthSlice() {
        let monthStartingIndexValidate = "0";
        monthStartingIndexValidate = ("0" + monthStartingIndexValidate).slice(-2); //error
        let monthEndingIndex = 24;
        for(monthStartingIndex = 0; monthStartingIndex < monthEndingIndex; monthStartingIndex++) {
        ...
        } 
    }
    

    【讨论】:

    • 没有 Gaurav,我无法更改变量的数据类型。有很多算法等待很快实现。
    • @Tanzeel 然后您需要使用该值在另一个变量中执行此操作。我不确定你想用这个值做什么,你能解释一下吗?
    • 我这样做是因为我必须验证月份。格式为MM-DD-YYYY。这就是为什么我希望他们成为01, 02, 03, ...09 以遵守MM。否则验证失败。而且我无法更改MM-DD-YYYY 的格式。我的技术负责人不允许。 :-(
    • 你能把填充的值赋给一个字符串类型的新变量,然后验证它吗?
    • 对不起先生。我不明白这一点。你能解释一下吗? :-)
    猜你喜欢
    • 2012-04-14
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多