Javascript: formatowanie zaokrąglonej liczby do n miejsc dziesiętnych
W JavaScript typowym sposobem zaokrąglania liczby do N miejsc po przecinku jest coś w stylu:
function round_number(num, dec) {
return Math.round(num * Math.pow(10, dec)) / Math.pow(10, dec);
}
Jednak to podejście będzie zaokrąglać maksymalnie Z N miejsc po przecinku, podczas gdy ja chcę Zawsze zaokrąglać do N miejsc po przecinku. Na przykład "2.0 "będzie zaokrąglone do"2".
Jakieś pomysły?9 answers
To nie jest zaokrąglanie ploblem, to jest problem z wyświetlaniem. Liczba nie zawiera informacji o cyfrach znaczących; wartość 2 jest taka sama jak 2.0000000000000. To, gdy zmienisz zaokrągloną wartość w ciąg znaków, który sprawi, że wyświetli określoną liczbę cyfr.
Możesz po prostu dodać zera po liczbie, coś w stylu:
var s = number.toString();
if (s.indexOf('.') == -1) s += '.';
while (s.length < s.indexOf('.') + 4) s += '0';
(Należy zauważyć, że zakłada się, że ustawienia regionalne klienta używają kropki jako separatora dziesiętnego, kod wymaga więcej pracy aby działać dla innych ustawień.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-08 11:33:44
Myślę, że istnieje bardziej proste podejście do wszystkich podanych tutaj, a Metoda Number.toFixed()
jest już zaimplementowana w JavaScript.
Po prostu napisz:
var myNumber = 2;
myNumber.toFixed(2); //returns "2.00"
myNumber.toFixed(1); //returns "2.0"
Itd...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-05 14:38:05
Znalazłem sposób. Jest to kod Christopha z poprawką:
function toFixed(value, precision) {
var precision = precision || 0,
power = Math.pow(10, precision),
absValue = Math.abs(Math.round(value * power)),
result = (value < 0 ? '-' : '') + String(Math.floor(absValue / power));
if (precision > 0) {
var fraction = String(absValue % power),
padding = new Array(Math.max(precision - fraction.length, 0) + 1).join('0');
result += '.' + padding + fraction;
}
return result;
}
Przeczytaj szczegóły powtarzania znaku za pomocą konstruktora tablicy tutaj jeśli jesteś ciekawy, dlaczego dodałem "+ 1".
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:35
Zawsze jest lepszy sposób na robienie rzeczy.
var number = 51.93999999999761;
Chciałbym dostać cztery cyfry precyzja: 51.94
Po prostu zrób:
number.toPrecision(4);
Wynik będzie: 51.94
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-12 08:31:22
PHP-jak metoda zaokrąglania
Poniższy kod może być użyty do dodania własnej wersji matematyki.round to your own namespace which take a precision parameter. W przeciwieństwie do zaokrąglania dziesiętnego w powyższym przykładzie, nie wykonuje to konwersji do i z łańcuchów, a parametr precyzji działa tak samo jak PHP i Excel, gdzie dodatnie 1 zaokrąglałoby się do 1 miejsca po przecinku, a -1 zaokrąglałoby do dziesiątek.
var myNamespace = {};
myNamespace.round = function(number, precision) {
var factor = Math.pow(10, precision);
var tempNumber = number * factor;
var roundedTempNumber = Math.round(tempNumber);
return roundedTempNumber / factor;
};
myNamespace.round(1234.5678, 1); // 1234.6
myNamespace.round(1234.5678, -1); // 1230
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-27 01:18:26
Mam nadzieję, że działający kod (nie zrobił zbyt wiele testów):
function toFixed(value, precision) {
var precision = precision || 0,
neg = value < 0,
power = Math.pow(10, precision),
value = Math.round(value * power),
integral = String((neg ? Math.ceil : Math.floor)(value / power)),
fraction = String((neg ? -value : value) % power),
padding = new Array(Math.max(precision - fraction.length, 0) + 1).join('0');
return precision ? integral + '.' + padding + fraction : integral;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-27 14:31:28
Oto link do Javascript sprintf,
Http://www.webtoolkit.info/javascript-sprintf.html
Wywołanie sprintf () jest jedną z metod zaokrąglania w Perlu, ale javascript nie posiada tej funkcji natywnie.
Http://perldoc.perl.org/functions/sprintf.html
Czy to pomaga?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-08 11:29:38
Myślę, że poniżej funkcja może pomóc
function roundOff(value,round) {
return (parseInt(value * (10 ** (round + 1))) - parseInt(value * (10 ** round)) * 10) > 4 ? (((parseFloat(parseInt((value + parseFloat(1 / (10 ** round))) * (10 ** round))))) / (10 ** round)) : (parseFloat(parseInt(value * (10 ** round))) / ( 10 ** round));
}
Użycie: roundOff(600.23458,2);
zwróci 600.23
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-08 20:35:13
Jeśli nie zależy ci na zaokrąglaniu, po prostu dodaj toFixed (x), a następnie usuń końcowe 0es i kropkę, jeśli to konieczne. Nie jest to szybkie rozwiązanie.
function format(value, decimals) {
if (value) {
value = value.toFixed(decimals);
} else {
value = "0";
}
if (value.indexOf(".") < 0) { value += "."; }
var dotIdx = value.indexOf(".");
while (value.length - dotIdx <= decimals) { value += "0"; } // add 0's
return value;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-13 14:52:43