2016-08-25 4 views
0

есть номер 15.67789.Как исправить число до двух десятичных знаков без округления?

Я хочу показать только два числа после десятичной точки (т. Е. 15.67) без выполнения округления по числу.

Для Eg:

15.67789.toFixed (2) возвращает 15.68 вместо

Я хочу, чтобы отобразить только 15.67.

+5

Возможный дубликат [Display двух знаков после запятой, не округляя] (http://stackoverflow.com/questions/4187146/display-two-decimal-places-no-rounding) –

+0

Сделайте это строка и разделить два места после десятичной точки. – Shilly

+1

Можете ли вы исследовать функцию Precision? – Ruhul

ответ

0

angular.module('app', [])
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<body ng-app='app'> 
 
<input type='number' ng-model='tex' /> 
 
{{tex|number:2}} 
 
</body>

использовать number фильтр, чтобы указать количество цифр, которое будет отображаться после десятичной точки.

+0

Использовал ли ОП использование углового? – ofca

+0

У этого есть угловая метка –

+0

Тогда почему угловой знак JS добавляется к вопросу –

1

Использование регулярных выражений:

редактировать: Я модифицировал регулярное выражение, чтобы принять числа без десятичных знаков и чисел с одного знака после запятой (спасибо @ Ми-Творчества):

var num = 134.35324; 
num.toString().match(/^(\d*(\.\d{0,2})?)/)[0]; 

Рабочий пример https://jsfiddle.net/yevwww8m/2/

Использование substr:

var num = 15.67789; 
num = num.toString().substr(0,'15.67789'.indexOf('.')+3); 

Рабочий пример: https://jsfiddle.net/pmmy9o3r/

Просто для удовольствия, используя регулярное выражение замены:

var num = 15.57789; 
num = num.toString().replace(/^(\d+\.\d{2}).*/g, '$1'); 

Рабочий пример: https://jsfiddle.net/4eq3jd4e/

+1

Первый метод завершится ошибкой и вызовет ошибку для чисел без десятичных знаков и цифр с одним десятичным знаком [пример jsFiddle] (https://jsfiddle.net/kpno14f1/) .. вы должны использовать ** '/^(\ d * (\. \ d {0,2})?)/'**. –

+1

Также, если OP должен иметь 2 десятичных разряда всегда, вы должны использовать 'toFixed (2)' всеми тремя способами. –

+0

Фактически используется '/^(\d*(\.\d{1,2})?)/'имеет больше смысла, потому что, если он имеет нулевые десятичные разряды, он не имеет десятичной точки. Еще одна вещь, которую вы, возможно, захотите принять в процессе рассмотрения, - это если строка (например, 'foo') передана второму и третьему методам, она пройдет как совпадение! [JsFiddle] (https://jsfiddle.net/kpno14f1/1/). –

0

Изменено

Просто умножить число на 100, чтобы переместить точку два десятичные разряды, затем разделите его на 100

var nums = [15.67789, 101.62, 134.35324, 0.00658853, 0.002422, 4.27, 1.1095]; 
 

 
for (var i = 0; i < nums.length; ++i) { 
 
    var temp = nums[i] * 100; 
 
    temp = (('' + temp).split('.')[1] !== '99999999999994') ? (Math.floor(temp)/100) : nums[i]; 
 
    console.log(temp.toFixed(2)); 
 
}

+0

Что такое downvote? –

+1

Раньше вы округлили число, не использовали 'floor' и' toFixed'. Я отменил ваш downvote, кажется, теперь ваш код работает правильно. – ofca

+0

@Techie_Learner, как насчет ответа сейчас? –

Смежные вопросы