【问题标题】:Determine precision of number, including trailing zeros确定数字的精度,包括尾随零
【发布时间】:2020-04-22 04:38:38
【问题描述】:

我怀疑这是不可能的,但试一试:

是否可以确定数字的小数点数,无论这些小数点是否为尾随零?

getPrecision(3) // 0
getPrecision(3.2) // 1
getPrecision(2.30) // 2

我已经为前两种情况找到了一些解决方案(包括:How do I get the decimal places of a floating point number in Javascript?),但对于最后一种情况没有。将3.20 转换为字符串会导致"3.2",这没有帮助,而且我几乎没有想法。

【问题讨论】:

  • 由于您不能将 3.20 存储为整数并保留最后一个 0,因此您可以始终将该值作为字符串传递。拆分'.'上的字符串并在 '2.30'.split('.')[1].length 上执行字符串长度 - 再次假设您始终将数字作为字符串传递。
  • @Brant 不幸的是,我希望能够处理最初是数字的值。使用字符串我可以按照您的建议进行操作,但是在将数字转换为字符串时,我丢失了最后一个 0
  • 使用什么数据类型来存储数字? Javascript 数字通常是 IEEE 754 64 位二进制浮点数,小数位没有意义。例如,最接近 2.30 的值为 2.29999999999999982236431605997495353221893310546875
  • 2.29999999999999982236431605997495353221893310546875 也最接近 2.3、2.30000、2.3000000000000 等。除非您使用保留小数位数的特殊数据类型,否则它们都将表示相同。跨度>
  • 从概念上讲,所有有限的double 都可以表示为带有任意数量的尾随零的十进制文本。 double q = 5; q/= 2;q可以打印为2.5、2.50、2.500等。

标签: javascript floating-point numbers precision


【解决方案1】:

是的,这是可能的,但只有一个技巧

首先,根据您的问题陈述,如果您要求 javascript 将您的浮点值拆分并计数为 2 个整数,那么它将不包括尾随的 0。

让我们在这里用一个技巧来满足我们的要求;)

在下面的函数中,您需要以字符串格式传递一个值,它会完成您的工作

function getPrecision(value){
a = value.toString()
console.log('a ->',a)
b = a.split('.')
console.log('b->',b)
return b[1].length

getPrecision('12.12340') // Call a function

例如,运行以下逻辑

value = '12.12340'
a = value.toString()
b = a.split('.')
console.log('count of trailing decimals->',b[1].length)

就是这样!只需以字符串格式传递浮点值即可! 谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-05
    • 2021-05-24
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    相关资源
    最近更新 更多