2016-07-14 26 views
0

Ich habe versucht, nach einer Lösung für dieses Problem zu suchen, aber ich bin mir nicht sicher, wie ich die Frage stellen soll.

Ich bin eine TextView mit Wörtern und Zahlen zu füllen und ich habe es in einer Aktivität eingerichtet.

 float leftTimeSecs = leftTime/1000; 
     float roundedLeftSecs = round(leftTimeSecs, 3); 
     //How to access this directly from "strings" or .xml files 
     duration.setText(getString(R.string.time_data_sec, roundedLeftSecs, 
       getString(R.string.seconds))); 

Meine Zeichenfolge, die ich den Text auf ist:

<string name="time_data_sec">Duration: %1$f %2$s</string> 

und die genannte Rundenfunktion ist

public static float round(float value, int places) { 
     if (places < 0) throw new IllegalArgumentException(); 
     BigDecimal bigDecimal = new BigDecimal(value); 
     bigDecimal = bigDecimal.setScale(places, RoundingMode.HALF_UP); 
     return bigDecimal.floatValue(); 
    } 

I der Ausgang den Wert von roundedLeftSecs drucken möchten (was leftTime auf drei Stellen gerundet), aber wenn ich die run- dedLeftSecs nicht fest codiere, werden viele nachgestellte Nullen nach der gerundeten Zahl erzeugt.

Ich habe festgestellt, dass% 1 $ d ist ein Dezimal Platzhalter, aber es wird nicht zulassen, dass ich mit einem Float oder einem doppelten Ausdruck verwenden, so dass ich nicht sicher bin, wie diese Nullen loswerden oder wenn es überhaupt möglich ist.

Antwort

0

Für diejenigen, die das gleiche Problem haben, löste ich es mit% 1 $ s und konvertierte meine gerundete Zahl in eine Zeichenfolge und es funktioniert perfekt!

Hier ist, wo ich abzurunden wollte:

float leftTimeSecs = leftTime/1000; 
       float roundedLeftSecs = round(leftTimeSecs, 3); 
       String roundedLeftSecString = Float.toString(roundedLeftSecs); 
       duration.setText(getString(R.string.time_data_sec, roundedLeftSecString, 
         getString(R.string.seconds))); 

Hier die Zeichenfolge:

<string name="time_data_sec">Duration: %1$s %2$s</string>