2012-04-19 14 views
6

ho questo:Elimina le cifre dopo il numero di due cifre decimali non arrotondato in javascript?

i=4.568; 
document.write(i.toFixed(2)); 

uscita:

4.57 

Ma io non voglio arrotondare l'ultimo numero a 7, cosa posso fare?

+0

Quando si lavora con binario in virgola mobile, cose come questa possono accadere. – Pointy

+0

@Pointy: No; semplicemente non vuole arrotondare. – SLaks

+0

Sì, ma il mio punto è che in generale quando si ha a che fare con virgola mobile non si può garantire che una costante che si digita finirà per essere ciò che si pensa, arrotondando o non arrotondando, principalmente perché 2 e 5 sono relativamente primi: -) – Pointy

risposta

9

Utilizzare invece la matematica semplice;

document.write(Math.floor(i * 100)/100); 

(jsFiddle)

Si può attaccare nel vostro propria funzione per il riutilizzo;

function myToFixed(i, digits) { 
    var pow = Math.pow(10, digits); 

    return Math.floor(i * pow)/pow; 
} 

document.write(myToFixed(i, 2)); 

(jsFiddle)

+0

La funzione non restituisce nulla ..! –

+0

dovrebbe essere: document.write (Math.floor (i * 100)/100); –

0

Un approccio leggermente contorto:

var i=4.568, 
    iToString = ​i + ''; 
    i = parseFloat(iToString.match(/\d+\.\d{2}/)); 
console.log(i); 

Questo avviene effettivamente la variabile i e lo converte in una stringa, quindi utilizza regex per abbinare i numeri prima del punto decimale e i due seguenti quel punto decimale, usando parseFloat() per poi riconvertirlo in un numero.

Riferimenti:

5

Basta tagliare la stringa più lunga:

i.toFixed(3).replace(/\.(\d\d)\d?$/, '.$1') 
+0

grazie per il post SLaks – ranjenanil

+0

toFixed è una soluzione più breve che fa il suo lavoro. – Mayhem

Problemi correlati