2012-04-18 14 views
9

Potrzebuję zaokrąglić liczbę do dwóch miejsc po przecinku. Teraz następujące zaokrągla do najbliższej liczby całkowitej Chybanumer rundy do 2 miejsc dziesiętnych

puts [expr {round($total_rate)}] 

Jeśli zrobić coś jak poniżej nie działa. Czy istnieje inny sposób?

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

Nie można zaokrąglić liczby zmiennoprzecinkowej do żadnej liczby miejsc dziesiętnych większej od zera. Nie ma miejsc dziesiętnych. Ma binarne miejsca i są niewspółmierne. Musisz użyć dziesiętnej podstawki, zazwyczaj za pomocą formatyzatora. – EJP

Odpowiedz

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

przykład

% 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 ** $ miejsc dziesiętnych * wartość $)/10.0 ** $ decimalplaces}}; expr {roundto ($ total_rate, 2)} ' –

12

Najprostszym sposobem zaokrąglić do określonej liczby miejsc po przecinku jest z format:

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

Należy pamiętać, że jeśli za pomocą zaokrąglona wartość dla dalszych obliczeń zamiast wyświetlania użytkownikom, większość wartości drukowanych za pomocą zaokrąglania do X Miejsca dziesiętne nie będą miały dokładnej reprezentacji w arytmetykach binarnych (które Tcl używa wewnętrznie, podobnie jak ogromna liczba innych języków programowania). Najlepiej zarezerwować zaokrąglenie do określonej liczby DP, do poziomu, w którym pokazywane są wartości dla ludzi.

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

Dzięki wykorzystaniu formatu, możemy zobaczyć wynik w produkcji, ale jak używać tej samej wartości w programie, to znaczy, widzimy 1.448 jak 1.45 na wyjściu, ale możemy użyć 1.45 w programie wtedy.

Powiązane problemy