round resultado redondeo redondear hacia digitos decimales como arriba javascript html angularjs angularjs-filter

resultado - Cómo redondear en Javascript/Angular JS-pero eliminar dígitos insignificantes



redondear decimales javascript (3)

Como las otras respuestas realmente no funcionaron bien, o no incorporaron o no trabajaron con el servicio $ locale de Angular, escribí el siguiente filter :

Modelo:

<span>{{yourNumber | roundTo: N}}</span>

Filtrar:

app.filter(''roundTo'', function(numberFilter) { return function(value, maxDecimals) { return numberFilter((value || 0) .toFixed(maxDecimals) .replace(/(?:/.0+|(/./d+?)0+)$/, "$1") ); } })

  • Redondea el número al número máximo de decimales.

  • Recorta todos los ceros finales

  • Elimina el separador decimal cuando no es necesario

  • Y utiliza el formato de $ locale de Angular

Tengo la siguiente declaración en mi controlador de Javascript:

$scope.myList = [0, 1, 0.5, 0.6666666];

La plantilla de Mi AngularJS incluye lo siguiente:

<div ng-repeat="i in myList">{{i}}</div>

Esto produce el siguiente resultado HTML:

<div>0</div> <div>1</div> <div>0.5</div> <div>0.6666666</div>

Sin embargo, quiero que los números se redondeen a 2 decimales. Sin embargo, me gustaría ver solo dígitos significativos en la salida. No quiero ver ceros finales. ¿Cómo lo hago? Utilizando {{i | number:2}} {{i | number:2}} no elimina los ceros finales.


Lo haría así:

<div ng-repeat="i in myList">{{formatNumber(i)}}</div>

y en tu mando:

$scope.formatNumber = function(i) { return Math.round(i * 100)/100; }


Puedes simplemente multiplicar por 1 para convertirlo en valor verdadero.

<div ng-repeat="i in myList">{{(i | number:2)*1}}</div>

Como se señaló en los comentarios anteriores, la solución se interrumpirá debido al formato de la configuración regional mediante el filtro de número angular. Si necesita el formato y el redondeo de la configuración regional, puede crear un filtro de extensión que, debajo, utilice el number filter y el servicio $locale .

.filter(''numberEx'', [''numberFilter'', ''$locale'', function(number, $locale) { var formats = $locale.NUMBER_FORMATS; return function(input, fractionSize) { //Get formatted value var formattedValue = number(input, fractionSize); //get the decimalSepPosition var decimalIdx = formattedValue.indexOf(formats.DECIMAL_SEP); //If no decimal just return if (decimalIdx == -1) return formattedValue; var whole = formattedValue.substring(0, decimalIdx); var decimal = (Number(formattedValue.substring(decimalIdx)) || "").toString(); return whole + decimal.substring(1); }; } ]);

Y utilízalo como:

<div ng-repeat="i in myList">{{i | numberEx:2}}</div>

Manifestación

angular.module(''app'', []).controller(''ctrl'', function($scope) { $scope.myList = [0, 10000.56, 0.5, 0.6666666, -1000.23123, 1, 1002, 2.5, 30.5, 22]; }).filter(''numberEx'', [''numberFilter'', ''$locale'', function(number, $locale) { var formats = $locale.NUMBER_FORMATS; return function(input, fractionSize) { //Get formatted value var formattedValue = number(input, fractionSize); //get the decimalSepPosition var decimalIdx = formattedValue.indexOf(formats.DECIMAL_SEP); //If no decimal just return if (decimalIdx == -1) return formattedValue; var whole = formattedValue.substring(0, decimalIdx); var decimal = (Number(formattedValue.substring(decimalIdx)) || "").toString(); return whole + decimal.substring(1); }; } ]);

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="app" ng-controller="ctrl"> <div ng-repeat="i in myList">{{i | numberEx:2}}</div> </div>