Показывать только десятичные дроби до 2 знаков в поле ввода - PullRequest
0 голосов
/ 06 октября 2018

У меня есть калькулятор, который я создаю, где пользователь может конвертировать объединенные назад и вперед между имперскими и метрическими.

Мой код для этого следующий:

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

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

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

, тогда он не вернется к тому же числу, потому что они округляются.

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

Есть ли способ использовать полные числа для конверсий, но показывать только цифры с двумя последними десятичными знаками?Я рассмотрел использование атрибута pattern в html (https://www.w3schools.com/tags/att_pattern.asp), но это не поддерживается Safari.

Есть идеи?

Ответы [ 2 ]

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

Я бы использовал функцию данных для хранения числа:

oldVal = jQuery(this).val();
oldVal = parseFloat(oldVal);
var val = (oldVal * 0.1589873);
jQuery(this).data("numberValue", val);
jQuery(this).val(parseFloat(val.toFixed(2)));

Вы можете получить его позже таким образом (при условии, что это все еще в контексте в тот момент):

var theValue = parseFloat(jQuery(this).data("numberValue"));
0 голосов
/ 06 октября 2018

Моя единственная проблема с этим заключается в том, что если я преобразую обратно ...

Поскольку вы прямо хотите отбросить несколько десятичных знаков, преобразование обратно просто не будет работать.Речь идет о математике больше, чем о кодировании.

Таким образом, вы должны сохранить «реальный» результат в переменной для преобразования обратно ... И показать другой, у которого пропущены десятичные дроби.

oldVal = jQuery(this).val();
oldVal = parseFloat(oldVal);
newConvertedVal = oldVal * 0.1589873;  // Keep that one!

newConvertedVal_toDisplay = newConvertedVal.toFixed(2);
jQuery(this).val(newConvertedVal_toDisplay);

И затем:

// Conversion back
converterdBack = (newConvertedVal / 0.1589873);  // Or squarely use oldVal !?!

Если это внутри подфункции и вам нужно сохранить это число для последующего преобразования обратно, у вас есть опции: localStorage , data - * атрибут, объект результата ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...