四舍五入没有小数位(值与10位小数返回?)
所以,我实现了这个代码和工作:四舍五入没有小数位(值与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
您可以在不的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);
}
您可以简单地使用
Float floatValue = 1.454f;
String.format("%.0f",floatValue);
哎呀,现在看到,我已修改代码 – 2014-09-03 13:26:09
现在是否正在工作? – 2014-09-03 14:05:43
虽然这没有使应用程序崩溃,但它什么都没做。我确实尝试使用这个:'String.format(“%。0f”,healthchest);'这个应用程序崩溃了。 – Mikitz06 2014-09-04 12:56:48
使用NumberFormat的格式化数字 – 2014-09-03 13:01:35
阅读附录d:什么每台计算机科学家应该知道关于浮点运算(http://docs.oracle.com /cd/E19957-01/806-3568/ncg_goldberg.html)。 – 2014-09-03 13:02:01