Формат числа, чтобы всегда показывать 2 десятичных знака
Я хотел бы отформатировать свои числа, чтобы всегда отображать 2 десятичных знака, округляя, где это применимо.
примеры:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
я использую этот:
parseFloat(num).toFixed(2);
но это отображение 1 как 1, а не 1.00.
23 ответов:
это прекрасно работает в FF4:
parseFloat(Math.round(num3 * 100) / 100).toFixed(2);Демо
var num1 = "1"; document.getElementById('num1').innerHTML = parseFloat(Math.round(num1 * 100) / 100).toFixed(2); var num2 = "1.341"; document.getElementById('num2').innerHTML = parseFloat(Math.round(num2 * 100) / 100).toFixed(2); var num3 = "1.345"; document.getElementById('num3').innerHTML = parseFloat(Math.round(num3 * 100) / 100).toFixed(2);span { border: 1px solid #000; margin: 5px; padding: 5px; }<span id="num1"></span> <span id="num2"></span> <span id="num3"></span>обратите внимание, что это будет круглые до 2 десятичных знаков, так что вход
1.346вернутся1.35.
Number(1).toFixed(2); // 1.00 Number(1.341).toFixed(2); // 1.34 Number(1.345).toFixed(2); // 1.34 NOTE: See andy's comment below. Number(1.3450001).toFixed(2); // 1.35
ответ не получится, если
value = 1.005.в качестве лучшего решения проблемы округления можно избежать, используя числа, представленные в экспоненциальной нотации:
Number(Math.round(1.005+'e2')+'e-2').toFixed(2); // 1.01
var num = new Number(14.12); console.log(num.toPrecision(2));//outputs 14 console.log(num.toPrecision(3));//outputs 14.1 console.log(num.toPrecision(4));//outputs 14.12 console.log(num.toPrecision(5));//outputs 14.120
простой ответ:
var num = 1.2353453; num.toFixed(2); // 1.24Пример:http://jsfiddle.net/E2XU7/
гораздо более общее решение для округления до N мест
function roundN(num,n){ return parseFloat(Math.round(num * Math.pow(10, n)) /Math.pow(10,n)).toFixed(n); } console.log(roundN(1,2)) console.log(roundN(1.34,2)) console.log(roundN(1.35,2)) console.log(roundN(1.344,2)) console.log(roundN(1.345,2)) console.log(roundN(1.344,3)) console.log(roundN(1.345,3)) console.log(roundN(1.3444,3)) console.log(roundN(1.3455,3)) Output 1.00 1.34 1.35 1.34 1.35 1.344 1.345 1.344 1.346
для наиболее точного округления, создайте эту функцию:
function round(value, decimals) { return Number(Math.round(value +'e'+ decimals) +'e-'+ decimals).toFixed(decimals); }и использовать его для округления до 2 знаков после запятой:
console.log("seeked to " + round(1.005, 2)); > 1.01спасибо разу,этой статьи, и математика MDN.круглая ссылка.
var number = 123456.789; console.log(new Intl.NumberFormat('en-IN', { maximumFractionDigits: 2 }).format(number));https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat
Если вы уже используете jQuery, вы можете посмотреть на использование формат номера jQuery плагин.
плагин может возвращать форматированные числа в виде строки, вы можете установить десятичные и тысячи разделителей, и вы можете выбрать количество десятичных знаков, чтобы показать.
$.number( 123, 2 ); // Returns '123.00'вы можете узнать формат номера jQuery от GitHub.
это то, что вы имеете в виду?
function showAsFloat(num, n){ return !isNaN(+num) ? (+num).toFixed(n || 2) : num; } document.querySelector('#result').textContent = [ 'command | result', '-----------------------------------------------', 'showAsFloat(1); | ' + showAsFloat(1), 'showAsFloat(1.314); | ' + showAsFloat(1.314), 'showAsFloat(\'notanumber\') | ' + showAsFloat('notanumber'), 'showAsFloat(\'23.44567\', 3) | ' + showAsFloat('23.44567', 3), 'showAsFloat(2456198, 5) | ' + showAsFloat('2456198', 5), 'showAsFloat(0); | ' + showAsFloat(0) ].join('\n');<pre id="result"></pre>
вы ищете пол?
var num = 1.42482; var num2 = 1; var fnum = Math.floor(num).toFixed(2); var fnum2 = Math.floor(num2).toFixed(2); alert(fnum + " and " + fnum2); //both values will be 1.00
преобразуйте число в строку, сохраняя только два десятичных знака:
var num = 5.56789; var n = num.toFixed(2);результатом n будет:
5.57
вот также общая функция, которая может форматировать любое количество десятичных знаков:
function numberFormat(val, decimalPlaces) { var multiplier = Math.pow(10, decimalPlaces); return (Math.round(val * multiplier) / multiplier).toFixed(decimalPlaces); }
там, где требуется определенное форматирование, вы должны написать свою собственную процедуру или использовать библиотечную функцию, которая делает то, что вам нужно. Основные функции ECMAScript-это, как правило, недостаточно для отображения отформатированного числа.
подробное объяснение округления и форматирования здесь:http://www.merlyn.demon.co.uk/js-round.htm#RiJКак правило, округление и форматирование должны быть выполнены только в качестве последнего шага перед выводом. Выполнение этого ранее может привести к неожиданно большим ошибкам и разрушить форматирование.
function currencyFormat (num) { return "$" + num.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, ",") } console.info(currencyFormat(2665)); // ,665.00 console.info(currencyFormat(102665)); // 2,665.00
function number_format(string,decimals=2,decimal=',',thousands='.',pre='R$ ',pos=' Reais'){ var numbers = string.toString().match(/\d+/g).join([]); numbers = numbers.padStart(decimals+1, "0"); var splitNumbers = numbers.split("").reverse(); var mask = ''; splitNumbers.forEach(function(d,i){ if (i == decimals) { mask = decimal + mask; } if (i>(decimals+1) && ((i-2)%(decimals+1))==0) { mask = thousands + mask; } mask = d + mask; }); return pre + mask + pos; } var element = document.getElementById("format"); var money= number_format("10987654321",2,',','.'); element.innerHTML = money;#format{ display:inline-block; padding:10px; border:1px solid #ddd; background:#f5f5f5; }<div id='format'>Test 123456789</div>
вы не даете нам всю картину.
javascript:alert(parseFloat(1).toFixed(2))показывает 1.00 в моих браузерах, когда я вставляю его в строку местоположения. Однако, если вы сделаете что-то с ним потом, он вернется.var num = 2 document.getElementById('spanId').innerHTML=(parseFloat(num).toFixed(2)-1) shows 1 and not 1.00
var quantity = 12; var import1 = 12.55; var total = quantity * import1; var answer = parseFloat(total).toFixed(2); document.write(answer);
Я делаю так:
var num = 12.749; parseFloat((Math.round(num * 100) / 100).toFixed(2)); // 123.75округлить число с 2 десятичными знаками, затем убедитесь, что разобрать его с
parseFloat()чтобы вернуть число, а не строку, если вам все равно, если это строка или число.
Extend мат С точность метод
Object.defineProperty(Math, 'precision',{ value: function (value,precision,type){ var v = parseFloat(value), p = Math.max(precision,0)||0, t = type||'round'; return (Math[t](v*Math.pow(10,p))/Math.pow(10,p)).toFixed(p); } }); console.log( Math.precision(3.1,3), // round 3 digits Math.precision(0.12345,2,'ceil'), // ceil 2 digits Math.precision(1.1) // integer part )
Comments