我在格式化双精度小数时遇到一些问题。如果我有一个双精度值,例如4.0,我该如何格式化小数位使其改为4.00?
我在格式化双精度小数时遇到一些问题。如果我有一个双精度值,例如4.0,我该如何格式化小数位使其改为4.00?
Answers:
一种方法是使用NumberFormat。
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
输出:
4.00
使用Java 8,您可以使用format
method ..:-
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
是用来 floating
点值。2
小数点后表示小数点后的位数 .
对于大多数Java版本,您可以使用DecimalFormat
:-
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
使用String.format,您可以执行以下操作:
double price = 52000;
String.format("$%,.2f", price);
注意逗号,这与@Vincent的答案不同
输出:
$52,000.00
格式化的好资源是关于该主题的官方 Java页面
您可以始终使用静态方法 printf from System.out
-然后实现相应的格式化程序;这样可以节省其他示例需要您做的堆空间。
例如:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
节省堆空间,这是一个很大的好处,尽管如此,我认为该示例比任何其他答案都更易于管理,特别是因为大多数程序员都知道C语言的printf函数(尽管Java略微更改了函数/方法)。
out
是PrintStream
。
new DecimalFormat("#0.00").format(4.0d);
另一种方法是使用setMinimumFractionDigits
从方法NumberFormat
类中。
在这里,您基本上可以指定小数点后要显示多少个数字。
所以输入4.0
将产生4.00
,假设您指定的数量为2。
但是,如果您 Double
输入的内容超过指定的数量,它将采用指定的最小数量,然后再加一位数字向上/向下取整
例如,4.15465454
至少指定2的量将产生4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
您可以通过多种方式执行此操作。以下是这些:
假设您的原始号码如下所示:
double number = 2354548.235;
使用NumberFormat:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
使用String.format:
System.out.println(String.format("%,.2f", number));
使用DecimalFormat和模式:
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
使用DecimalFormat和模式
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
在所有情况下,输出为: 2354548.23
注意事项:
在四舍五入期间,您可以添加RoundingMode
格式化程序。以下是给出的一些舍入模式:
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
这是进口:
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
您可以使用以下任何一种方法
如果您正在使用 java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
要么
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0));
如果要将其转换为简单的字符串格式
System.out.println(String.format("%.2f", 4.0));
以上所有代码将打印4.00
运作100%。
import java.text.DecimalFormat;
public class Formatting {
public static void main(String[] args) {
double value = 22.2323242434342;
// or value = Math.round(value*100) / 100.0;
System.out.println("this is before formatting: "+value);
DecimalFormat df = new DecimalFormat("####0.00");
System.out.println("Value: " + df.format(value));
}
}
首先进口NumberFormat
。然后添加:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
这将为您提供两位小数,并在处理货币时加一个美元符号。
import java.text.NumberFormat;
public class Payroll
{
/**
* @param args the command line arguments
*/
public static void main(String[] args)
{
int hoursWorked = 80;
double hourlyPay = 15.52;
double grossPay = hoursWorked * hourlyPay;
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
System.out.println("Your gross pay is " + currencyFormatter.format(grossPay));
}
}
您可以按照以下步骤进行操作:
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
##
代替了00
我知道这是一个老话题,但是如果您真的希望使用句点而不是逗号,只需将结果另存为X,00到字符串中,然后简单地将其更改一段时间即可得到X.00
最简单的方法就是使用replace。
String var = "X,00";
String newVar = var.replace(",",".");
输出将是您想要的X.00。为了使操作变得简单,您可以一次完成所有操作并将其保存到double变量中:
Double var = Double.parseDouble(("X,00").replace(",",".");
我知道此回复目前无济于事,但也许检查该论坛的人会寻找这样的快速解决方案。
String.format()
或java.text.Format
。