JS - конвертация с toFixed и обратно не одним и тем же номером - PullRequest
0 голосов
/ 06 октября 2018

Я конвертирую числа из поля ввода с помощью JS.Я использую .toFixed (2) для сокращения чисел, но потом, когда я конвертирую обратно, он теперь работает.

Пример: исходное значение ввода равно 100

Затем я конвертирую из bbl в m3 по моей формуле:

oldVal = jQuery(this).val();
oldVal = parseFloat(oldVal);
newConvertedVal = parseFloat((oldVal * 0.1589873).toFixed(2));
jQuery(this).val(newConvertedVal);

Это работает нормально, и я получаю свой результат 5,90

Когда я конвертирую обратно, однако, используя обратную формулу:

oldVal = jQuery(this).val();
oldVal = parseFloat(oldVal);
newConvertedVal = parseFloat((oldVal / 0.1589873).toFixed(2));
jQuery(this).val(newConvertedVal);

Когда я конвертирую обратно, я получаю 100.01

Там есть дополнительные 0,01,

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

1 Ответ

0 голосов
/ 06 октября 2018

Если под «преобразованием обратно» вы подразумеваете, что хотите получить результат преобразования в одном направлении с умножением на .1589873, с округлением до ближайших 100 th и преобразованием в обратном направлении сделение на .1589873 для получения исходного ввода, это невозможно.

Округление до ближайшего 100 th отбрасывает информацию.В частности, преобразование отображает несколько разных чисел в один результат.

Например, рассмотрите возможность преобразования 100 и 100.01:

  • 100 • .1589873 = 15,89873.При округлении до ближайшего 0,01 получается 15,90.
  • 100,01 • .1589873 = 15,900319873.При округлении до ближайшего 0,01 получается 15,90.

Следовательно, из результата преобразования 15,90 невозможно определить, был ли исходный ввод 100 или 100,01.Никакие вычисления не могут дать правильный ответ.

...