Формат числа, чтобы всегда показывать 2 десятичных знака



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



примеры:



number     display
------ -------
1 1.00
1.341 1.34
1.345 1.35


я использую этот:



parseFloat(num).toFixed(2);


но это отображение 1 как 1, а не 1.00.

846   23  

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

кредит: округление десятичных знаков в JavaScript

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
)

parseInt(number * 100) / 100; работал для меня.

(num + "").replace(/^([0-9]*)(\.[0-9]{1,2})?.*$/,"")

вот как я решаю свою проблему:

parseFloat(parseFloat(floatString).toFixed(2));

Comments

    Ничего не найдено.