我想要的是一种将double转换为使用half-up方法进行舍入的字符串的方法 - 即如果要舍入的小数为5,则它总是向上舍入到前一个数字.这是在大多数情况下舍入大多数人所期望的标准方法.
我也希望只显示有效数字 - 即不应该有任何尾随零.
我知道这样做的一种方法是使用该String.format方法:
String.format("%.5g%n", 0.912385);
Run Code Online (Sandbox Code Playgroud)
收益:
0.91239
Run Code Online (Sandbox Code Playgroud)
这很好,但它总是显示5位小数的数字,即使它们不重要:
String.format("%.5g%n", 0.912300);
Run Code Online (Sandbox Code Playgroud)
收益:
0.91230
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用DecimalFormatter:
DecimalFormat df = new DecimalFormat("#.#####");
df.format(0.912385);
Run Code Online (Sandbox Code Playgroud)
收益:
0.91238
Run Code Online (Sandbox Code Playgroud)
但是你可以看到这使用了半均匀舍入.也就是说,如果前一个数字是偶数,它将向下舍入.我想要的是这个:
0.912385 -> 0.91239
0.912300 -> 0.9123
Run Code Online (Sandbox Code Playgroud)
在Java中实现这一目标的最佳方法是什么?
我已经阅读了很多stackoverflow问题,但似乎没有一个对我有用.我正在math.round()用来完善.这是代码:
class round{
public static void main(String args[]){
double a = 123.13698;
double roundOff = Math.round(a*100)/100;
System.out.println(roundOff);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:123但我希望它是123.14.我读到添加*100/100会有所帮助但是你可以看到我没有设法让它工作.
输入和输出都是双倍的绝对必要.
如果您更改上面代码的第4行并发布它将会非常有用.
我在格式化双精度小数时遇到了一些问题.如果我有一个双精度值,例如4.0,我如何格式化小数,使其为4.00?
可能重复:
将小数点后的双精度数加到2位有效数字
如何在点后将双倍转换为2个数字?
例如:
double x=123.45678;
Run Code Online (Sandbox Code Playgroud)
我需要x=123.45(在java中为android)
提前致谢
我正在编写一个简单的java程序.我需要从输入中获取一个字符串并将其分为两部分:1-double 2-string.然后我需要对double进行简单的计算,并以特定的精度将结果发送到输出(4).它工作正常,但输入为0时出现问题,然后它无法正常工作.
例如,对于这些输入,输出将是:
1公斤
产量:2.2046
3.1千克
产量:6.8343
但是当输入为0时,输出应为0.0000,但显示为0.0.我应该怎么做才能强制显示0.0000?
我读过关于双精度的类似帖子,他们建议类似于BigDecimal类,但在这种情况下我不能使用它们,我这样做的代码是:
line=input.nextLine();
array=line.split(" ");
value=Double.parseDouble(array[0]);
type=array[1];
value =value*2.2046;
String s = String.format("%.4f", value);
value = Double.parseDouble(s);
System.out.print(value+" kg\n");
Run Code Online (Sandbox Code Playgroud) 我正在使用Android Studio为Android创建应用.我有一个代码块,收集一些字符串,将它们转换为双精度数,将它们放入方程式,然后将答案放入TextViews,只有两个小数位.
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)));
Run Code Online (Sandbox Code Playgroud)
但是,当运行此代码块时,应用程序崩溃,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 …Run Code Online (Sandbox Code Playgroud) 作为一个更大的程序的一部分,我有这个函数,当被调用时,返回返回的字符串.accountHolder,balance,interestRate和points是RewardsCreditAccount类型的对象中的变量.所以,例如,我在这里声明了一个对象:
RewardsCreditAccount testAccount = new RewardsCreditAccount("Joe F. Pyne", 7384.282343837483298347, 0.173, 567);
Run Code Online (Sandbox Code Playgroud)
所以这个对象将设置accountHolder ="Joe F. Pyne",balance = 7384.282343837483298347,依此类推.
在下面的函数中,我将这个信息返回一个字符串,如下所示:
Joe F. Pyne,7384.282美元,17.28%,567分
使用此功能:
public String toString() {
return (accountHolder + ", $" + + balance + 100*interestRate + "%, " + points + " points");
}
Run Code Online (Sandbox Code Playgroud)
但是,它实际上是返回此:
Joe F. Pyne,$ 7384.282,17.299999999999997%,567分
我试过这个,但无济于事
public String toString() {
return (accountHolder + ", $" + + ("%,1.2f",balance) + 100*interestRate + "%, " + points + " points");
}
Run Code Online (Sandbox Code Playgroud)
这很烦人,因为我希望它只返回两个小数位.我知道这可以使用%1.2f完成,但我不知道如何格式化语法.我非常感谢任何有关正确显示十进制值的帮助.谢谢!
我有浮点值像0.152545我只想要0.1f.
怎么可能..
通过使用String我得到了String值.下面的代码显示了结果.
String pass = pass.substring(0, Math.min(pass.length(), 3));
pass=pass+"f";
Run Code Online (Sandbox Code Playgroud)
这给了我类似于0.1f的字符串值,但我只想要像0.1f那样的Float值.