如何将双精度数格式化为字符串(仅保留两位小数)?

3
我正在使用Android Studio为Android创建一个应用程序。我有一段代码块,用于收集一些字符串,将它们转换成双精度浮点数,将其放入方程式中,然后将答案放入只有两位小数的TextView中。
double weightDouble = Double.parseDouble(weightTextField.getText().toString());
                double dehydrationDouble = Double.parseDouble(dehydrationTextField.getText().toString());
                double lossesDouble = Double.parseDouble(lossesTextField.getText().toString());
                double factorDouble = Double.parseDouble(factorTextField.getText().toString());

                double fluidStepOne = (((Math.sqrt(Math.sqrt((weightDouble * weightDouble * weightDouble))))) * 70) * factorDouble;
                double fluidStepTwo = fluidStepOne + (weightDouble * dehydrationDouble * 10);
                double fluid24Hours = fluidStepTwo + lossesDouble;
                double fluidHourInt = fluid24Hours / 24;

                fluidResultLabel.setText(String.format(Locale.US, "%.2f", Double.toString(fluid24Hours)));
                fluidPerHourResultLabel.setText(String.format(Locale.US, "%.2f", Double.toString(fluidHourInt)));

然而,当运行这段代码时,应用程序会崩溃,并且Android Studio会显示以下信息-
 java.util.IllegalFormatConversionException: %f can't format java.lang.String arguments
 at java.util.Formatter.badArgumentType(Formatter.java:1489)
 at java.util.Formatter.transformFromFloat(Formatter.java:2038)
 at java.util.Formatter.transform(Formatter.java:1465)
 at java.util.Formatter.doFormat(Formatter.java:1081)
 at java.util.Formatter.format(Formatter.java:1042)
 at java.util.Formatter.format(Formatter.java:1011)
 at java.lang.String.format(String.java:1554)
 at com.georgeberdovskiy.fluidtherapy.MainActivity$1.onClick(MainActivity.java:82)
 at android.view.View.performClick(View.java:5204)
 at android.view.View$PerformClick.run(View.java:21153)
 at android.os.Handler.handleCallback(Handler.java:739)
 at android.os.Handler.dispatchMessage(Handler.java:95)                           at android.os.Looper.loop(Looper.java:148)                                       at android.app.ActivityThread.main(ActivityThread.java:5444)                
 at java.lang.reflect.Method.invoke(Native Method)                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:746)           

我的问题是-

  • 我该如何解决这个问题?(如何将double正确格式化为两位小数的字符串)
  • 还有其他什么可以改变,使我的代码更短且更不容易出错吗?

谢谢!- 乔治

附言- 这个问题不是重复的,因为与我的情况不同的是,先前相同问题的答案并未奏效。

5个回答

5

Double.toString() 替换为以下仅包含 double 值的方式:

String formattedNumber = String.format(Locale.US, "%.2f", fluid24Hours);

或者从Java 8开始使用以下格式化程序:

NumberFormat formatter = DecimalFormat.getInstance(Locale.US);
formatter.setMaximumFractionDigits(2);
String formattedNumber = formatter.format(fluid24Hours);

如果您打算使用默认语言环境,请使用较短的形式:String.format("%.2f", fluid24Hours) - Andreas
@Andreas 是的,没错。但他使用了美国本地化设置,所以我修改了答案。 - Prasad

2
double d1 = 123456.78;
double d2 = 567890;
Locale fmtLocale = Locale.getDefault(Category.FORMAT);
NumberFormat formatter = NumberFormat.getInstance(fmtLocale);
formatter.setMaximumFractionDigits(2);
formatter.setMinimumFractionDigits(2);
System.out.println(formatter.format(d1));
System.out.println(formatter.format(d2));
System.out.println(fmtLocale.toLanguageTag());

1
将原始的双精度值转换为字符串,假设称为aString。 然后使用以下代码: newTrimmedString = aString.substring(0, Math.min(AString.length(), 5)); 其中5表示您希望打印/保存的总字符数。


1
使用此代码。
fluidPerHourResultLabel.setText(new DecimalFormat("##.##").format(fluidHourInt));

请查看链接仅显示小数点后两位

我知道可能有些答案也是有效的,但我先尝试了这个并且它起作用了。谢谢Shanto。 - George B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接