2014-11-20 1 views
0

Как упростить округление в JavaScript? Я хочу, чтобы я мог сделать это более элегантно объектно-ориентированным образом. Метод toFixed работает хорошо, но не имеет обратного округления, а также возвращает строку, а не число.Добавить метод округления в Number.prototype в JavaScript

pi.toFixed(2).valueOf(); 
// 3.14 

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

pi = Math.round(pi * 100)/100; 
// 3.14 

Было бы гораздо лучше, вместо того, чтобы просто придерживаться метода до конца переменной, такой as:

pi.round(2); 
// 3.1r 
+0

две вещи не являются эквивалентными. Вы ожидаете, что pi.round (2) будет * мутировать * номер? Это невозможно, поскольку числа неизменны. – Sacho

+0

Что не так с 'pi.toFixed (2)'? – Barmar

+0

Mutability: Все, что я могу сделать, это кивать и улыбаться, делая вид, что знает, что это значит. Для того, что стоит, [Wikipedia] (https://en.wikipedia.org/wiki/Immutable_object#JavaScript) говорит: «Пользовательские классы, как правило, изменяемы. Чтобы имитировать неизменность в классе, нужно установить неизменные свойства прототипу объект «. – Iktys

ответ

0

Расширить номер.прототип. Номера в Javascript - это тип данных, который связан со встроенным объектом «Номер». Добавьте следующий polyfill блок:

if (!Number.prototype.round) { 
    Number.prototype.round = function (decimals) { 
     if (typeof decimals === 'undefined') { 
      decimals = 0; 
     } 
     return Math.round(
      this * Math.pow(10, decimals) 
     )/Math.pow(10, decimals); 
    }; 
} 

Anywhere после этого, вы можете округлить число, прикрепляя .round() до конца их. Он имеет один необязательный параметр, определяющий число десятичных знаков. Например:

pi.round(2); 

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

x = 54321; 
x.round(-4); 
// 50000 

Fiddle: http://jsfiddle.net/g2n2fbmq/

Похожие:

+1

Что такое 'Number.prototype.contains'? – Barmar

+0

Метод 'contains' возвращает true или false. Это способ проверки того, что Number.prototype еще не используется. – Iktys

+0

Я не продвинутый программист, и сейчас я начинаю обдумывать прототипы. Я так гордился этим, что решил показать это. Если я делаю что-то не так, пожалуйста, ударьте меня, а затем объясните, почему. – Iktys