Я работаю с другой кодовой базой, которую я не могу контролировать и которую не вижу. Я могу отправить ему входные данные, и он вернет мне результаты. Эта кодовая база также не определяет, в чем она написана, но это не имеет значения, так как мне нужно только передать ей числа, и она возвращает мне свои выведенные числа. Я знаю только, какие ожидаемые входы и выходы.

Один из входов, с которыми мне приходится работать, требует от меня ввода длиной ровно 6 знаков после запятой. Большинство моих чисел будут намного выше 6 десятичных знаков, поэтому я могу просто округлить или усечь их, но в случае, если они округляются до или случайным образом оказываются такими числами, как 0.125 или 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
Michael Treat 28 Авг 2017 в 14:32

4 ответа

Лучший ответ
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 десятичных чисел. Но взгляните на эту библиотеку, в ней есть много вещей для вас, и она может помочь вам

Десятичная дробь

1
l.g.karolos 29 Авг 2017 в 07:25

В основном 0.5 === 0.500000, если вы думаете математически.

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

Я думаю, что toFixed () предназначен для использования в целях отображения.

Чего ты хочешь достичь? Почему нельзя использовать его как строку и использовать parseFloat (), когда вам нужно сделать некоторые вычисления?

0
bennygenel 28 Авг 2017 в 11:44

Попробуйте Number( 1/2 ).toFixed(6), он возвращает то, что вам нужно

0
JohnPan 28 Авг 2017 в 11:37

Попробуй это:

parseFloat(val.toFixed(6))
2
Zoe 3 Май 2019 в 18:10