【问题标题】:JS- toFixed returns a string, but I need a number to 6 digitsJS-toFixed 返回一个字符串,但我需要一个 6 位数字
【发布时间】:2018-02-05 15:55:06
【问题描述】:

我正在使用另一个我无法控制且看不到的代码库。我可以向它发送输入,它会将输出返回给我。这个代码库也没有指定它是用什么写的,但这并不重要,因为我只需要传递它的数字,它就会把它的输出数字交还给我。我只知道预期的输入和输出是什么。

我必须处理的一个输入要求我提供一个精确到小数点后 6 位的输入。我的大多数数字都将远高于 6 位小数,所以我可以对其进行四舍五入或截断,但如果它被四舍五入或随机恰好是像 0.1250.5 这样的数字,我无法输入正确的数字。

例如,如果我有一个像0.5 这样的数字,那是一个有效且合法的数字,但我输入它的函数不会接受它并且会出错,因为它不是精确到小数点后 6 位的数字像0.500000 这样的地方。我也无法输入"0.500000" 的字符串,因为它正在寻找一个数字,而不是一个字符串,所以它也会出错。

在原生 JavaScript 中是否有一个数字保持特定的精度,即使它的末尾有额外的死零?

例子:

(1/2).toFixed(6) === "0.500000" // the toFixed() function returns a *String*, not a *Number*.

(1/2).toFixed(6) /1 === 0.5 // dividing by 1 coerces it to a Number, but drops the decimals back off the end.

Number( (1/2).toFixed(6) ) === 0.5 // Trying to convert it into a Number using the Number Constructor does the same as  the example above it.

*编辑:为了清楚起见,我需要一个小数点后 6 位的数字,而不是字符串。

【问题讨论】:

  • 我不明白第一个代码示例有什么问题。
  • JS中没有这样的数字。 + 你甚至不需要它。显示时,使用字符串表示,用数字计算时,使用原生精度。
  • 如果您只想显示数字,那么您可以将数字转换为字符串并在最后一个小数位后添加零。
  • HTML 甚至无法显示数字,它们无论如何都会被转换为字符串...
  • 数字没有固定的小数位数。它们有动态数量的二进制位置,没有办法改变它。对不起。如果您关心十进制表示,请使用字符串或控制输出方法。

标签: javascript decimal precision tofixed


【解决方案1】:

试试Number( 1/2 ).toFixed(6),它会返回你需要的东西

【讨论】:

  • 这将返回 OP 列表中的第 3 项。
  • 它返回“0.500000”,据我了解,这就是他想要的......虽然不太清楚......
  • 正确的Teemu,我需要输出一个数字到小数点后6位。 toFixed 返回一个字符串,当我尝试将其转换为数字时,它会去掉多余的 0 并给我 0.5 作为数字。类型强制也不起作用,因为它被输出到的函数将检查类型,而我无法控制该函数。
  • 仍然,我不明白为什么...如果您需要一个数字,则需要它来计算事物,并且 .5 等于 .50000000 所以没问题...如果您想显示数字,为什么要关心它是否是一个字符串? @Michael__Treat
  • 我要输出的函数要求精确到小数点后 6 位,它将处理算法的计算。
【解决方案2】:

function myFunction() {

        var a = (1/2).toFixed(6) + "<br>";
        var b = parseFloat(a).toFixed(6) + "<br>";
       
        var x = new Decimal(123.4567) + "<br>";
         var n = a + b + c;
        document.getElementById("demo").innerHTML = n;
    }
<script src="https://raw.githubusercontent.com/MikeMcl/decimal.js/master/decimal.min.js">
</script>

<button onclick="myFunction()">Try it</button>

    <p id="demo"></p>

一个数字不包含有效数字的信息;值 2 与 2.0000000000000 相同。当您将四舍五入的值转换为字符串时,您可以使其显示一定数量的数字。

函数需要 6 个十进制数似乎有点奇怪。 但是看看这个库,它有很多适合你的东西,它可能会对你有所帮助

Decimal

【讨论】:

  • HTML 始终是文本,因此这基本上是 OP 列表中的第 1 项。
  • 这很好,但我正在输出到另一个需要它是数字的函数。虽然它在这里显示为 0.500000,但如果您实际检查它的类型,它是 typeof 字符串。我需要将一个数字输出到小数点后 6 位。当您尝试将字符串“0.500000”转换为数字时,您将得到 0.5
【解决方案3】:

基本上0.5 === 0.500000,如果你从数学上思考的话。

console.log((1 / 2) + (1 / 1000000)); // this would print out 0.500001 

toFixed() 我认为是用于显示目的。

你想达到什么目标?为什么在需要做一些计算的时候不能把它当成字符串用 parseFloat() 呢?

【讨论】:

  • 我必须将一个数字输出到另一个使用它的函数,并且该函数需要输入一个至少为小数点后 6 位的数字。我无法控制要输出到的函数,所以我必须输出一个精确到 6 位小数的数字。大多数数字将超过 6 位小数,在这种情况下我可以截断或四舍五入,但对于小于 6 位小数的数字或四舍五入到小于 6 位小数的数字是给我的问题。不过,我认为您的解决方案是最好的解决方案。
  • 这个功能在哪里?如果那是一个javascript函数,我不明白为什么要控制小数位。如果不是,您如何触发该功能?
【解决方案4】:

试试这个:

parseFloat(val.toFixed(6))

【讨论】:

    猜你喜欢
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    相关资源
    最近更新 更多