2016-03-28 6 views
0

Ich habe eine Methode, um die Größe einer App zu bekommen. Aber das Problem ist Ich bekomme immer 0,00 Wert nach dem Komma.Android - Double-Wert gibt immer 00 nach Dezimal

Angenommen, die Größe eines App ist 3,44

Also, wenn ich dann meine Methode aufrufen, wird es einen Wert von 3,00 Und zurückkehren, wird es für jede Anwendung gleich. Wenn die Größe einer App weniger als 1 MB beträgt, dann bekomme ich 0,00. Bitte hilf mir. Hier ist meine Methode

private String getAppsSize() { 
     File cApp; 
     DecimalFormat cDFormat = new DecimalFormat("#.##"); 
     double appSizeInMegaBytes; 
     String formattedText = null; 
     try { 
      cAInfo = cPManager.getApplicationInfo(getCurrentAppPackageName(), 0); 
      cApp = new File(cAInfo.publicSourceDir); 
      appSizeInMegaBytes = cApp.length()/1048576; 
      cDFormat.format(appSizeInMegaBytes); 
      formattedText = Double.toString(appSizeInMegaBytes); 
     } 
catch (PackageManager.NameNotFoundException e) { 
      showToast("Failed to count app size!"); 
      e.printStackTrace(); 
     } 
     return formattedText; 
    } 

Hier habe ich eine Methode getCurrentPackageName(). Es verursacht keinen Fehler. Weil ich es woanders benutze. Es funktioniert gut. So, jetzt weiß ich nicht, wo mein Problem auftritt ...

Antwort

0

Ihr Problem ist, dass cApp.length() eine long zurückgibt, und dann teilen Sie das durch eine andere ganze Zahl, so dass Sie keine Dezimalzahl erhalten werden Orte auf diese Weise. Versuchen Sie stattdessen, durch ein anderes Doppel zu teilen. So etwas wie:

double megaByte = 1048576; 
appSizeInMegaBytes = cApp.length()/megaByte; 

Nur eine Dezimalzahl in Ihrem Divisor Hinzufügen sollte auch arbeiten: appSizeInMegaBytes = cApp.length()/1048576.0;

+0

Ok, es funktioniert. Aber ich bekomme viel Wert nach dem Komma. Wenn ich jetzt die Methode anrufe, bekomme ich 3.0256983 (Beispiel). Aber, ich möchte die letzten zwei Ziffern nur nach dem Dezimal –

+0

Ok, danke. Ich habe meine Lösung. –

0

Ich verlasse mich immer auf der guten alten implizite Konvertierung von Strings:

  formattedText = ""+appSizeInMegaBytes; 

Das ist, wie Sie werde sehen, ob der Wert gut ist.

0

Sie werfen Ihre formatierten Text in diesen Zeilen aus:

cDFormat.format(appSizeInMegaBytes); 
formattedText = Double.toString(appSizeInMegaBytes); 

Die Format.format() eine Zeichenfolge zurück, also nicht werfen Sie es nicht aus. Versuchen Sie dies stattdessen:

formattedText = cDFormat.format(appSizeInMegaBytes);