toString и valueOf усекают завершающие 0 с после десятичной - PullRequest
4 голосов
/ 20 мая 2010

В javascript я заметил, что toString и valueOf обрезают конечные 0 после десятичной дроби. Например:

var num = 0.00
var num2 = 0.0100

num.valueOf() or num.toString() // outputs 0
num2.valueOf() or num2.toString() // outputs 0.01

Это нормальное поведение, и есть ли какой-нибудь способ сохранить конечные 0?

РЕДАКТИРОВАТЬ: я изменил свой первоначальный вопрос, потому что после некоторого тестирования я понял, что вышеуказанное является корнем проблемы. Спасибо.

Ответы [ 2 ]

4 голосов
/ 20 мая 2010

Это не toString и valueOf, которые обрезают конечные 0 после десятичного числа!
Когда вы пишете десятичное число таким образом:

var num2 = 0.0100

вы говорите интерпретатору, что переменная num2 должна содержать десятичное число 0,0100, т. Е. 0,01, поскольку последние два нуля не имеют значения.
Десятичное число - это память, представленная в виде десятичного числа:

0.0100
0.010
0.01
0.01000

- это все одно и то же число, поэтому они все представлены в памяти одинаково. Невозможно различить их.
Поэтому невозможно узнать, было ли присвоено num2 значение 0,01 для записи этого числа с нулем, одним, двумя или более конечными нулями.

Если вы хотите сохранить десятичное число так, как оно написано, вы должны сохранить его в виде строки.

2 голосов
/ 20 мая 2010

A число в javascript не имеет конечных нулей если бы мог, где бы вы остановились? Это нормальное поведение. Вы можете заставить их появляться, если вы возвращаете строку-

var n= '0.0'
alert(n)>> 0
alert(n.toFixed(5))>> '0.00000'
alert(n.toPrecision(5))>>'0.0000'
...