7

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

我必须使用的输入之一要求我提供一个精确到小数点后 6 位的输入。我的大多数数字将远高于 6 位小数,因此我可以对其进行四舍五入或截断,但如果四舍五入或随机恰好是类似0.125or的数字0.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 位的数字,而不是字符串。

4

4 回答 4

4

试试这个:

parseFloat(val.toFixed(6))
于 2019-05-03T13:38:45.663 回答
0

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

于 2017-08-28T11:37:31.870 回答
0

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 个十进制数似乎有点奇怪。但是看看这个库,它有很多东西给你,它可能会帮助你

十进制

于 2017-08-28T11:37:59.467 回答
0

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

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

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

你想达到什么目标?为什么在需要进行一些计算时不能将其用作字符串并使用 parseFloat() ?

于 2017-08-28T11:44:45.363 回答