Ik wil mijn getallen zo opmaken dat ze altijd 2 decimalen weergeven, met afronding indien van toepassing.
Voorbeelden:
number display
------ -------
1 1.00
1.341 1.34
1.345 1.35
Ik heb dit gebruikt:
parseFloat(num).toFixed(2);
Maar het geeft 1
weer als 1
in plaats van 1.00
.
Antwoord 1, autoriteit 100%
(Math.round(num * 100) / 100).toFixed(2);
Livedemo
Antwoord 2, autoriteit 28%
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
Antwoord 3, autoriteit 9%
Dit antwoordmislukt als value = 1.005
.
Als een betere oplossing kan het afrondingsprobleem worden vermeden door getallen te gebruiken die worden weergegeven in exponentiële notatie:
Number(Math.round(1.005+'e2')+'e-2'); // 1.01
Schonere code zoals voorgesteld door @Kon en de oorspronkelijke auteur:
Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces)
U kunt aan het einde toFixed()
toevoegen om de komma te behouden, bijvoorbeeld: 1.00
maar houd er rekening mee dat het als tekenreeks zal terugkeren.
Number(Math.round(parseFloat(value + 'e' + decimalPlaces)) + 'e-' + decimalPlaces).toFixed(decimalPlaces)
Tegoed: Decimalen afronden in JavaScript
Antwoord 4, autoriteit 4%
Gebruik voor moderne browsers toLocaleString
:
var num = 1.345;
num.toLocaleString(undefined, { maximumFractionDigits: 2, minimumFractionDigits: 2 });
Geef een locale-tag op als eerste parameter om het decimaal scheidingstekente beheren. Gebruik voor een punt bijvoorbeeld de Engelse Amerikaanse landinstelling:
num.toLocaleString("en-US", { maximumFractionDigits: 2, minimumFractionDigits: 2 });
wat geeft:
1.35
De meeste landen in Europa gebruiken een komma als decimaalteken, dus als je bijvoorbeeld Zweeds/Zweden gebruikt:
num.toLocaleString("sv-SE", { maximumFractionDigits: 2, minimumFractionDigits: 2 });
het geeft:
1,35
Antwoord 5, autoriteit 2%
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
Antwoord 6, autoriteit 2%
Maak deze functie voor de meest nauwkeurige afronding:
function round(value, decimals) {
return Number(Math.round(value +'e'+ decimals) +'e-'+ decimals).toFixed(decimals);
}
en gebruik het om af te ronden op 2 decimalen:
console.log("seeked to " + round(1.005, 2));
> 1.01
Met dank aan Razu, ditartikel, en MDN’s Math.round-referentie.
Antwoord 7
Eenvoudigste antwoord:
var num = 1.2353453;
num.toFixed(2); // 1.24
Voorbeeld: http://jsfiddle.net/E2XU7/
Antwoord 8
Een veel algemenere oplossing voor het afronden naar N plaatsen
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
Antwoord 9
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
Antwoord 10
Als je jQuery al gebruikt, kun je de gebruiken jQuery Number Formatplug-in.
De plug-in kan opgemaakte getallen retourneren als een tekenreeks, u kunt decimalen en scheidingstekens voor duizendtallen instellen en u kunt het aantal decimalen kiezen dat u wilt weergeven.
$.number( 123, 2 ); // Returns '123.00'
Je kunt ook jQuery Number Format van GitHubkrijgen.
Antwoord 11
Is dit wat je bedoelt?
[bewerk 20200530] Het antwoord @razu mitsis de beste imho. Dus hier is een enigszins aangepaste versie.
De code van het fragment retourneert nog steeds niet de juiste waarde voor iets als showAsFloat(2.3346)
(resultaat 2.33, maar zou 2.34 moeten zijn). Dus zie ook.
const showAsFloat = (input, decimals = 2, asString = false) => {
if (input === null || input.constructor === Boolean || isNaN(+input)) {
return input;
}
const converted = +( `${Math.round( parseFloat( `${input}e${decimals}` ) )}e-${decimals}` );
return asString ? converted.toFixed(decimals) : converted
};
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, true)| ' + showAsFloat('24568', 5, true),
'showAsFloat(2456198, 5) | ' + showAsFloat('24568', 5),
'showAsFloat(0, 2, true); | ' + showAsFloat(0, 2, true),
'showAsFloat(1.345); | ' + showAsFloat(1.345),
'showAsFloat(0.005); | ' + showAsFloat(0.005),
'showAsFloat(null); | ' + showAsFloat(null),
].join('\n');
<pre id="result"></pre>
Antwoord 12
Een getal omzetten in een tekenreeks, met slechts twee decimalen:
var num = 5.56789;
var n = num.toFixed(2);
Het resultaat van n is:
5.57
Antwoord 13
Kom net dit een van de langste threads tegen, hieronder is mijn oplossing:
parseFloat(Math.round((parseFloat(num * 100)).toFixed(2)) / 100 ).toFixed(2)
Laat het me weten als iemand een gaatje kan porren
Antwoord 14
Bent u op zoek naar vloer?
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
Antwoord 15
function currencyFormat (num) {
return "$" + num.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")
}
console.info(currencyFormat(2665)); // $2,665.00
console.info(currencyFormat(102665)); // $102,665.00
Antwoord 16
Hier is ook een algemene functie die kan opmaken tot een willekeurig aantal decimalen:
function numberFormat(val, decimalPlaces) {
var multiplier = Math.pow(10, decimalPlaces);
return (Math.round(val * multiplier) / multiplier).toFixed(decimalPlaces);
}
Antwoord 17
Waar specifieke opmaak vereist is, moet u uw eigen routine schrijven of een bibliotheekfunctie gebruiken die doet wat u nodig hebt. De basisfunctionaliteit van ECMAScript is meestal onvoldoende om opgemaakte getallen weer te geven.
Een uitgebreide uitleg van afronding en opmaak vindt u hier: http://www.merlyn.demon.co.uk/js-round.htm#RiJ
Als algemene regel geldt dat afronding en opmaak alleen moeten worden uitgevoerd als laatste stap voor uitvoer. Als u dit eerder doet, kunt u onverwacht grote fouten maken en de opmaak vernietigen.
Antwoord 18
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>
Antwoord 19
Hier is een andere oplossing om alleen met de vloer te gebruiken, wat betekent dat het berekende bedrag niet groter is dan het oorspronkelijke bedrag (soms nodig voor transacties):
Math.floor(num* 100 )/100;
Antwoord 20
Probeer hieronder code:
function numberWithCommas(number) {
var newval = parseFloat(Math.round(number * 100) / 100).toFixed(2);
return newval.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
Antwoord 21
U geeft ons niet de hele foto.
javascript:alert(parseFloat(1).toFixed(2))
toont 1.00 in mijn browsers wanneer ik het in de locatiebalk plak.
Maar als je er daarna iets aan doet, zal het terugkeren.
alert(parseFloat(1).toFixed(2))
var num = 2
document.getElementById('spanId').innerHTML = (parseFloat(num).toFixed(2) - 1)
<span id="spanId"></span>
Antwoord 22
var quantity = 12;
var import1 = 12.55;
var total = quantity * import1;
var answer = parseFloat(total).toFixed(2);
document.write(answer);
Antwoord 23
Ik moest kiezen tussen de parseFloat()- en Number()-conversies voordat ik toFixed() kon aanroepen. Hier is een voorbeeld van een getalopmaak na het vastleggen van gebruikersinvoer.
HTML:
<input type="number" class="dec-number" min="0" step="0.01" />
Event-handler:
$('.dec-number').on('change', function () {
const value = $(this).val();
$(this).val(value.toFixed(2));
});
De bovenstaande code resulteert in een TypeError-uitzondering. Merk op dat hoewel het html-invoertype “getal” is, de gebruikersinvoer in feite een “string”-gegevenstype is. De functie toFixed() mag echter alleen worden aangeroepen voor een object dat een Getal is.
Mijn uiteindelijke code zou er als volgt uitzien:
$('.dec-number').on('change', function () {
const value = Number($(this).val());
$(this).val(value.toFixed(2));
});
De reden dat ik de voorkeur geef aan casten met Number() versus parseFloat() is omdat ik geen extra validatie hoef uit te voeren, noch voor een lege invoertekenreeks, noch voor NaN-waarde. De functie Number() zou automatisch een lege string afhandelen en deze naar nul verbergen.
Antwoord 24
var num1 = "0.1";
document.getElementById('num1').innerHTML = (Math.round(num1 * 100) / 100).toFixed(2);
var num2 = "1.341";
document.getElementById('num2').innerHTML = (Math.round(num2 * 100) / 100).toFixed(2);
var num3 = "1.345";
document.getElementById('num3').innerHTML = (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>
Antwoord 25
RegExp – alternatieve benadering
Bij invoer heb je een tekenreeks (omdat je ontleden gebruikt), zodat we resultaat kunnen krijgen door alleen tekenreeksmanipulaties en berekeningen met gehele getallen te gebruiken
let toFix2 = (n) => n.replace(/(-?)(\d+)\.(\d\d)(\d+)/, (_,s,i,d,r)=> {
let k= (+r[0]>=5)+ +d - (r==5 && s=='-');
return s + (+i+(k>99)) + "." + ((k>99)?"00":(k>9?k:"0"+k));
})
// TESTs
console.log(toFix2("1"));
console.log(toFix2("1.341"));
console.log(toFix2("1.345"));
console.log(toFix2("1.005"));
Antwoord 26
Ik hou van:
var num = 12.749;
parseFloat((Math.round(num * 100) / 100).toFixed(2)); // 123.75
Rond het getal af met 2 decimalen,
zorg er dan voor dat je het ontleden met parseFloat()
om Number te retourneren, niet String, tenzij het u niet uitmaakt of het String of Number is.
Antwoord 27
Verleng Mathobject met de precisiemethode
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
)
Antwoord 28
function formatValeurDecimal(valeurAFormate,longueurPartieEntier,longueurPartieDecimal){
valeurAFormate = valeurAFormate.replace(",",".")
valeurAFormate = parseFloat(valeurAFormate).toFixed(longueurPartieDecimal)
if(valeurAFormate == 'NaN'){
return 0
}
//____________________valeurPartieEntier__________________________________
var valeurPartieEntier = valeurAFormate | 0
var strValeur = valeurPartieEntier.toString()
strValeur = strValeur.substring(0, longueurPartieEntier)
valeurPartieEntier = strValeur
//____________________valeurPartieDecimal__________________________________
strValeur = valeurAFormate
strValeur = strValeur.substring(strValeur.indexOf('.')+1)
var valeurPartieDecimal = strValeur
valeurAFormate = valeurPartieEntier +'.'+valeurPartieDecimal
if(valeurAFormate == null){
valeurAFormate = 0
}
return valeurAFormate
}
Antwoord 29
parseInt(number * 100) / 100;
werkte voor mij.
Antwoord 30
U kunt deze code proberen:
function FormatNumber(number, numberOfDigits = 2) {
try {
return new Intl.NumberFormat('en-US').format(parseFloat(number).toFixed(numberOfDigits));
} catch (error) {
return 0;
}
}
var test1 = FormatNumber('1000000.4444');
alert(test1); // 1,000,000.44
var test2 = FormatNumber(100000000000.55555555, 4);
alert(test2); // 100,000,000,000.5556