2014-09-03 29 views
-1

所以,我实现了这个代码和工作:四舍五入没有小数位(值与10位小数返回?)

try { 
     float healthF = Float.parseFloat(getHealth); 
     healthchest.setText(Float.toString((healthF * 100) * 0.30f)); 
    } 

但它返回的值有大约10有6位小数随机放置最后。类似于这样的东西:###。0000000006。奇怪的是healthF的值是30. 3000 * .3等于900.不是900.0000000006。

我试图实现这个:

try { 
     float healthF = Float.parseFloat(getHealth); 
     healthchest.setText(Float.toString((healthF * 100) * 0.30f)); 
     df.format(healthchest); 
    } 

但它会导致应用程序具有以下logcat的崩溃:

09-03 03:26:54.755: W/dalvikvm(1080): threadid=1: thread exiting with uncaught exception (group=0x41465700) 
09-03 03:26:54.785: E/AndroidRuntime(1080): FATAL EXCEPTION: main 
09-03 03:26:54.785: E/AndroidRuntime(1080): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mikitz.rogsimple/com.mikitz.rogsimple.ArmorStatsSP}: java.lang.IllegalArgumentException: Bad class: class android.widget.EditText 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at android.os.Handler.dispatchMessage(Handler.java:99) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at android.os.Looper.loop(Looper.java:137) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at android.app.ActivityThread.main(ActivityThread.java:5103) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at java.lang.reflect.Method.invokeNative(Native Method) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at java.lang.reflect.Method.invoke(Method.java:525) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at dalvik.system.NativeStart.main(Native Method) 
09-03 03:26:54.785: E/AndroidRuntime(1080): Caused by: java.lang.IllegalArgumentException: Bad class: class android.widget.EditText 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at java.text.NumberFormat.format(NumberFormat.java:304) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at java.text.DecimalFormat.format(DecimalFormat.java:702) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at java.text.Format.format(Format.java:93) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at com.mikitz.rogsimple.ArmorStatsSP.onCreate(ArmorStatsSP.java:78) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at android.app.Activity.performCreate(Activity.java:5133) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175) 
09-03 03:26:54.785: E/AndroidRuntime(1080):  ... 11 more 
+1

使用NumberFormat的格式化数字 – 2014-09-03 13:01:35

+4

阅读附录d:什么每台计算机科学家应该知道关于浮点运算(http://docs.oracle.com /cd/E19957-01/806-3568/ncg_goldberg.html)。 – 2014-09-03 13:02:01

回答

0

您可以在不的EditText传递到DecimalFormat的,请使用以下方法并将值传递给它,而不是设置返回到edittext的字符串。

public static String twoDecimalPlaces(double value){ 
      try 
      { 
       DecimalFormat df = new DecimalFormat("#.##"); 
       return df.format(value); 
      } catch (Exception e) { 
       LogHandler.error("twoDecimalPlaces","main",e); 
      } 
      return String.valueOf(value); 
     } 
0

您可以简单地使用

Float floatValue = 1.454f; 
String.format("%.0f",floatValue); 
+0

哎呀,现在看到,我已修改代码 – 2014-09-03 13:26:09

+0

现在是否正在工作? – 2014-09-03 14:05:43

+0

虽然这没有使应用程序崩溃,但它什么都没做。我确实尝试使用这个:'String.format(“%。0f”,healthchest);'这个应用程序崩溃了。 – Mikitz06 2014-09-04 12:56:48