【发布时间】:2012-09-30 03:40:26
【问题描述】:
我在格式化双精度的小数时遇到了一些问题。如果我有双重价值,例如4.0,如何格式化小数,使其改为 4.00?
【问题讨论】:
标签: java formatting double decimal
我在格式化双精度的小数时遇到了一些问题。如果我有双重价值,例如4.0,如何格式化小数,使其改为 4.00?
【问题讨论】:
标签: java formatting double decimal
【讨论】:
您可以使用以下任何一种方法
如果您使用的是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
【讨论】:
有很多方法可以做到这一点。这些在下面给出:
假设您的原始号码如下所示:
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;
【讨论】:
另一种方法是使用NumberFormat 类中的setMinimumFractionDigits 方法。
这里你基本上可以指定小数点后要出现多少个数字。
所以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));
【讨论】:
使用 Java 8,您可以使用 format 方法..:-
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));
【讨论】:
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));
}
}
【讨论】:
使用 String.format,您可以这样做:
double price = 52000;
String.format("$%,.2f", price);
注意与@Vincent 的回答不同的逗号
输出:
$52,000.00
一个很好的格式化资源是关于主题的official java 页面
【讨论】:
我知道这是一个老话题,但是如果您真的喜欢使用句号而不是逗号,只需将您的结果保存为 X,00 到一个字符串中,然后只需将其更改一个句点,这样您就可以得到X.00
最简单的方法就是使用替换。
String var = "X,00";
String newVar = var.replace(",",".");
输出将是您想要的 X.00。此外,为了方便起见,您可以一次完成所有操作并将其保存到双变量中:
Double var = Double.parseDouble(("X,00").replace(",",".");
我知道这个回复现在没有用,但也许查看这个论坛的人会寻找这样的快速解决方案。
【讨论】:
首先导入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));
}
}
【讨论】:
您始终可以使用静态方法printf from System.out - 然后您将实现相应的格式化程序;这节省了其他示例需要您执行的堆空间。
例如:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
节省了堆空间,这是一个很大的好处,但我认为这个例子比任何其他答案都更易于管理,特别是因为大多数程序员都知道 C 中的 printf 函数(尽管 Java 稍微改变了函数/方法) .
【讨论】:
out 是PrintStream。
printf是PrintStream的静态方法。请参阅here ;) 但仍然 +1。
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
【讨论】:
其中一种方法是使用NumberFormat。
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
输出:
4.00
【讨论】:
NumberFormat formatter = new DecimalFormat("#,000.00"); System.out.println(formatter.format(4.0));
你可以这样做:
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
【讨论】:
## 而不是00
new DecimalFormat("#0.00").format(4.0d);
【讨论】: