数字的前导零和尾随零

时间:2019-05-17 12:32:01

标签: javascript node.js typescript

我正在一个项目中,我需要通过以下方式格式化传入的数字:

###.###

但是我发现了一些意想不到的结果。 在我没有收到任何错误的意义上,以下作品有效:

console.log(07);

// or in my case:
console.log(007);

当然,它不会在值本身中保留'00',因为该值实际上是7。

以下内容相同:

console.log(7.0);

// or in my case:
console.log(7.000);

JavaScript可以理解我在做什么,但最终的实际值将是7,可以通过以下证明:

    const leadingValue = 007;
    const trailingValue = 7.00;

    console.log(leadingValue, trailingValue); // both are exactly 7

但是我发现以下是奇怪的:当我将两者结合在一起时,会出现语法错误:

// but not this:
console.log(007.000);

1)有人可以解释为什么它不起作用吗?

我正试图找到一种解决方案,以不使用字符串的精确度存储数字/浮点数。

2)JS / NodeJS甚至TypeScript中有什么方法可以在不使用字符串的情况下做到这一点?

我当前要做的是接收输入,扫描格式并将其存储为单独的属性,然后解析传入的值,因为parseInt('007.000')可以正常工作。而当用户想要获取此值时,将其返回给用户...不幸的是。

2 个答案:

答案 0 :(得分:2)

1)007.000是语法错误,因为007是八进制integer literal,然后向其附加一个浮点部分。 (尝试console.log(010)。这将打印8。)

2)以下是使用Intl.NumberFormat ...

进行格式化的方法

var myformat = new Intl.NumberFormat('en-US', { 
    minimumIntegerDigits: 3, 
    minimumFractionDigits: 3 
});
console.log(myformat.format(7)); // prints 007.000

答案 1 :(得分:0)

您可以使用使用字符串函数.split .padStart和.padEnd的方法

搜索MDN

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padEnd

这里有个例子:

const x = 12.1;

function formatNumber( unformatedNumber) {
  const desiredDecimalPad = 3;
  const desiredNonDecimalPad = 3;

  const unformatedNumberString = unformatedNumber.toString();
  const unformatedNumberArr = unformatedNumberString.split('.');
  const decimalStartPadded = unformatedNumberArr[0].padStart(desiredDecimalPad, '0');
  const nonDecimalEndPadded = unformatedNumberArr[1].padEnd(desiredNonDecimalPad, '0');
  const formatedNumberString = decimalStartPadded + '.' + nonDecimalEndPadded;

  return formatedNumberString;
}


console.log(formatNumber(x))