【发布时间】:2019-05-17 23:06:51
【问题描述】:
我正在做一个项目,我需要按以下方式格式化传入的数字:
###.###
但是我注意到了一些我没想到的结果。 在我没有收到错误的意义上,以下工作:
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') 确实有效。当用户想要获取这个值时,将它返回给用户......在一个字符串中......不幸的是。
【问题讨论】:
-
"以下作品" 你能解释一下你的意思吗?因为您在输出中没有得到数字
07或007。它“工作”的方式是它不会引发错误。而且我不知道你为什么需要写007.000- 这显然是一个语法错误(TBH,我直到现在才知道)但更重要的是,它没用,因为你是 充其量只会让7出去。 -
As 2) - 你不能转义字符串。 JS 数字只会以 JS 想要的方式表示。它不会捕获您使用的格式,因此
7和7.0和7.000是相同的值。对于我所知道的任何语言都是如此——原语需要单独的格式。 -
我猜这只会在没有
0s 的情况下显示。在内部它仍然是一样的,但为什么不只使用字符串呢?如果你想显示字符串的数字就可以了,如果你做3 * 7.00或3 * 7等等,计算也没有区别...... -
@VLAZ tbh,我只是在尝试我能做的事情,而不是刚刚遇到这个。我知道最终 7.0 将被视为 7。我正在寻找一种方法来防止将诸如“数量”之类的属性存储为字符串值,因为这对我来说没有意义。
标签: javascript node.js typescript