2012-04-18 10 views
9

Ho bisogno di arrotondare un numero a due cifre decimali. In questo momento i giri successivi al numero intero più vicino immaginonumero tondo fino a 2 posizioni decimali

puts [expr {round($total_rate)}] 

Se faccio qualcosa di simile sotto di esso non funziona. C'è un altro modo per aggirare?

puts [expr {round($total_rate,2)}] 
+0

Non è possibile arrotondare il punto mobile a un numero qualsiasi di posizioni decimali maggiore di zero. Non ha cifre decimali. Ha luoghi binari e sono incommensurabili. È necessario utilizzare un decimale decimale, in genere tramite un formattatore. – EJP

risposta

10
expr {double(round(100*$total_rate))/100} 

esempio

% set total_rate 1.5678 
1.5678 
% expr {double(round(100*$total_rate))/100} 
1.57 
% set total_rate 1.4321 
1.4321 
% expr {double(round(100*$total_rate))/100} 
1.43 
+2

'proc tcl :: mathfunc :: roundto {value decimalplaces} {expr {round (10 ** $ decimalplaces * $ value) /10.0 ** $ decimalplaces}}; expr {roundto ($ total_rate, 2)} ' –

12

Il modo più semplice per arrotondare a un numero specifico di cifre decimali è con format:

puts [format "%.2f" $total_rate] 

essere consapevoli che se si sta utilizzando il arrotondato valore per ulteriori calcoli invece di visualizzare per gli utenti, la maggior parte dei valori che si stampa utilizzando l'arrotondamento a X le posizioni decimali non avranno una rappresentazione esatta nell'aritmetica binaria (che Tcl utilizza internamente, come un vasto numero di altri linguaggi di programmazione). È meglio riservare un arrotondamento a un numero specifico di DP al punto in cui si stanno mostrando valori alle persone.

1
puts [format "%.2f" $total_rate] 

Utilizzando il formato, possiamo vedere il risultato in uscita, ma come utilizzare lo stesso valore nel programma, cioè, possiamo vedere 1.448 come 1,45 nell'output ma possiamo usare 1,45 nel programma poi.