Есть ли способ форматировать значение input[type='number']
, чтобы всегда показывать 2 десятичных знака?
Пример: Я хочу видеть "0.00"
вместо 0
.
Спасибо
Есть ли способ форматировать значение input[type='number']
, чтобы всегда показывать 2 десятичных знака?
Пример: Я хочу видеть "0.00"
вместо 0
.
Спасибо
Решенный после предложений и добавления части jQuery для форматирования формата для целых чисел parseFloat($(this).val()).toFixed(2)
Вы не можете на самом деле, но вы можете сделать это на полпути:
<input type='number' step='0.01' value='0.00' placeholder='0.00' />
Используя атрибут step
, он включит его. Он не только определяет, сколько он должен выполнять цикл, но и допустимые числа. Использование step="0.01"
должно сделать трюк, но это может зависеть от того, как браузер придерживается стандарта.
<input type='number' step='0.01' value='5.00'>
Решения, которые используют input="number"
step="0.01"
, отлично подходят для меня в Chrome, однако не работают в некоторых браузерах, в частности Frontmotion Firefox 35 в моем случае.., которые я должен поддерживать.
Мое решение заключалось в jQuery с плагином jQuery Mask Igor Escobar, следующим образом:
<script src="/your/path/to/jquery-mask.js"></script>
<script>
$(document).ready(function () {
$('.usd_input').mask('00000.00', { reverse: true });
});
</script>
<input type="text" autocomplete="off" class="usd_input" name="dollar_amt">
Это хорошо работает, конечно, нужно проверить представленное значение позже:) ПРИМЕЧАНИЕ. Если бы мне не нужно было делать это для совместимости браузеров, я бы использовал приведенный выше ответ @Rich Bradshaw.
Это быстрый форматировщик в JQuery, использующий функцию .toFixed(2) для двух десятичных знаков.
<input class="my_class_selector" type='number' value='33'/>
// if this first call is in $(document).ready() it will run
// after the page is loaded and format any of these inputs
$(".my_class_selector").each(format_2_dec);
function format_2_dec() {
var curr_val = parseFloat($(this).val());
$(this).val(curr_val.toFixed(2));
}
Минусы: вам нужно звонить каждый раз, когда изменяется номер ввода, чтобы переформатировать его.
// listener for input being changed
$(".my_class_selector").change(function() {
// potential code wanted after a change
// now reformat it to two decimal places
$(".my_class_selector").each(format_2_dec);
});
Примечание: по какой-то причине, даже если вход имеет тип 'number', jQuery val() возвращает строку. Следовательно, parseFloat()
Это правильный ответ:
<input type="number" step="0.01" min="-9999999999.99" max="9999999999.99"/>
Это работает, чтобы обеспечить максимум 2 десятичных знака без автоматического округления до 2 знаков, если пользователь не закончил печатать.
function naturalRound(e) {
let dec = e.target.value.indexOf(".")
let tooLong = e.target.value.length > dec + 3
let invalidNum = isNaN(parseFloat(e.target.value))
if ((dec >= 0 && tooLong) || invalidNum) {
e.target.value = e.target.value.slice(0, -1)
}
}
Я знаю, что это старый вопрос, но мне кажется, что ни один из этих ответов, кажется, не отвечает на вопрос, который задают, так что, надеюсь, это поможет кому-то в будущем.
Да, вы всегда можете показать 2 знака после запятой, но, к сожалению, это невозможно сделать только с помощью атрибутов элемента, вы должны использовать JavaScript.
Я должен отметить, что это не идеально для больших чисел, так как он всегда заставляет завершающие нули, поэтому пользователю придется перемещать курсор назад вместо удаления символов, чтобы установить значение больше, чем 9.99
//Use keyup to capture user input & mouse up to catch when user is changing the value with the arrows
$('.trailing-decimal-input').on('keyup mouseup', function (e) {
// on keyup check for backspace & delete, to allow user to clear the input as required
var key = e.keyCode || e.charCode;
if (key == 8 || key == 46) {
return false;
};
// get the current input value
let correctValue = $(this).val().toString();
//if there is no decimal places add trailing zeros
if (correctValue.indexOf('.') === -1) {
correctValue += '.00';
}
else {
//if there is only one number after the decimal add a trailing zero
if (correctValue.toString().split(".")[1].length === 1) {
correctValue += '0'
}
//if there is more than 2 decimal places round backdown to 2
if (correctValue.toString().split(".")[1].length > 2) {
correctValue = parseFloat($(this).val()).toFixed(2).toString();
}
}
//update the value of the input with our conditions
$(this).val(correctValue);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="my-number-input" class="form-control trailing-decimal-input" type="number" min="0.01" step="0.01" value="0.00" />
ui-number-mask для угловых, https://github.com/assisrafael/angular-input-masks
только это:
<input ui-number-mask ng-model="valores.irrf" />
если вы ставите значение один за другим....
need: 120,01
цифра на цифру
= 0,01
= 0,12
= 1,20
= 12,00
= 120,01 final number.
Мой предпочтительный подход, который использует атрибуты data
для хранения состояния числа:
<input type='number' step='0.01'/>
// react to stepping in UI
el.addEventListener('onchange', ev => ev.target.dataset.val = ev.target.value * 100)
// react to keys
el.addEventListener('onkeyup', ev => {
// user cleared field
if (!ev.target.value) ev.target.dataset.val = ''
// non num input
if (isNaN(ev.key)) {
// deleting
if (ev.keyCode == 8)
ev.target.dataset.val = ev.target.dataset.val.slice(0, -1)
// num input
} else ev.target.dataset.val += ev.key
ev.target.value = parseFloat(ev.target.dataset.val) / 100
})
Взгляните на this:
<input type="number" step="0.01" />
import { Component, Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'replace'
})
export class ReplacePipe implements PipeTransform {
transform(value: any): any {
value = String(value).toString();
var afterPoint = '';
var plus = ',00';
if (value.length >= 4) {
if (value.indexOf('.') > 0) {
afterPoint = value.substring(value.indexOf('.'), value.length);
var te = afterPoint.substring(0, 3);
if (te.length == 2) {
te = te + '0';
}
}
if (value.indexOf('.') > 0) {
if (value.indexOf('-') == 0) {
value = parseInt(value);
if (value == 0) {
value = '-' + value + te;
value = value.toString();
}
else {
value = value + te;
value = value.toString();
}
}
else {
value = parseInt(value);
value = value + te;
value = value.toString();
}
}
else {
value = value.toString() + plus;
}
var lastTwo = value.substring(value.length - 2);
var otherNumbers = value.substring(0, value.length - 3);
if (otherNumbers != '')
lastTwo = ',' + lastTwo;
let newValue = otherNumbers.replace(/\B(?=(\d{3})+(?!\d))/g, ".") + lastTwo;
parseFloat(newValue);
return '${newValue}';
}
}
}