2012-03-14 98 views
0

我想編寫一個方法將用戶的BMI(浮點數)四捨五入爲一個數字,邏輯是否正確以及如何在android Java中編寫它?如何在Android中將浮點數四捨五入爲一位數?

private static final DecimalFormat oneDigit = new DecimalFormat("#,##0.0"); 
     public static float roundToOneDigit(float paramFloat) 
    { 
     float f = Float.valueOf(oneDigit.format(paramFloat)).floatValue(); 

      f=f; 
     return f; 

    } 
+1

是否要將此值顯示給用戶?然後在'oneDigit.format(paramFloat)'後停下來,並使用該調用返回的String。 – 2012-03-14 20:36:05

回答

4

試試這個:

public static String roundToOneDigit(float paramFloat) { 
    return String.format("%.1f%n", paramFloat); 
} 
+0

我喜歡String.format的想法,但是這會將'23.456f'變成'2e + 01' :( – 2012-03-14 20:46:51

+0

我想你的意思是'%.1f%n'那裏,FTFY:現在'23.56f'爲'23.456f ':) – 2012-03-14 20:48:05

2

假設這是用於顯示對用戶有價值:

private static final DecimalFormat oneDecimal = new DecimalFormat("#,##0.0"); 

public static String formatBmi(double bmi) { 
    return oneDecimal.format(bmi); 
} 

一些變化:

  • 使用雙除非你異形它作爲一個瓶頸,更不用說落水漂浮
  • 你最有可能尋找「十進制」一詞,而不是「數字」
  • 更具描述性的方法名

如果這被同時從多個線程調用,靜態DecimalFormat將打破,因爲它是不是線程安全的。在這種情況下,您可能想要測試在每個方法調用中是否創建新的足夠快。

檢查出Caner's answers,更短和固有的線程安全。

+0

非常感謝 – user 2012-03-14 21:07:22