【问题标题】:JS Preserve decimals ending in zeroes [duplicate]JS保留以零结尾的小数[重复]
【发布时间】:2020-03-10 11:13:15
【问题描述】:

在 JavaScript 中,是否可以“锁定”十进制数,以保留以零结尾的“浮点”数?

例如,我有 2 个不同的数字,如下所示:(伪代码)

let a = 1.0;
let b = 1.00;
a === b  // true, should be false, because different decimals.
print(a) // "1", should be "1.0"
print(b) // "1", should be "1.00"

(也应该不同于“真正的 int”1)

我希望它们识别为彼此不同,因为它们最后有不同数量的零。

但愚蠢的“高效”JavaScript 将它们都向下舍入为“整数”1,因此它们是相等的。

我知道 Number.toFixed(Number) 和 Number.toPrecision(Number) 函数,但要像这样使用它们,我必须首先计算数字的长度,因为 JavaScript 已经舍入了零。

p>

我也一直在考虑“切掉”小数点处的数字并将它们存储在一个数组中......但同样,四舍五入为没有小数点的“int”。

(是的,我知道 JS 中不存在“float”的概念,我这里用它来区分带小数和不带小数的数字)。

感谢您的帮助。

【问题讨论】:

  • 为什么不将其保留为字符串?
  • 因为:"1.0" + "1.00" = "1.01.00" 这没有意义。
  • 那么如果是整数,1.0+1.00是多少? 2.0 或 2.00
  • javascript为什么要保留前导零?它们只是计算器内部的开/关位,没有 base10 长度的概念。你看到的只是对人类友好的表示,所以你的问题没有意义
  • @SebastianNorr 数字没有长度,也没有四舍五入发生。 var a = 1.00, b = 0x01; 甚至 var c = 6/(2*3); 是完全相同的值。仅仅因为您以不同的方式编写它们并不会改变数字。如果您想要某种格式,则需要自己处理;数字根本不包含它。

标签: javascript


【解决方案1】:

要比较 2 个不定类型的变量,必须在内部转换变量。这就是问题。因为 A 和 B 都是厚度为 1 的集合。 因此结果为 True。

但是,如果要比较零的数量,则必须将它们作为字符串进行比较。

所以要么你用

声明变量
let a = '1.0';
let b = '1.00';

或者您使用

转换变量
a.toString() === b.toString();

【讨论】:

  • 这可能行得通。我可以将它们存储为字符串并比较字符串,当我需要对它们进行数学运算时,我可以使用 Number.paseInt(Number)。
  • 问题是:1.00.toString() = "1";那么如何从以零结尾的十进制数中生成“十进制保留字符串”?
猜你喜欢
  • 2021-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 2014-09-13
  • 2019-06-26
  • 1970-01-01
相关资源
最近更新 更多