#1 楼
一种方法是使用NumberFormat。NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));
输出:
4.00
评论
是的,但是我不需要逗号,我想要一个十进制符号。
–克里斯托弗
2012年10月9日18:46
我正在逗号。这就是我所做的。 “双变量; NumberFormat格式化程序=新的DecimalFormat(”#0.00“); System.out.println(formatter.format(variable));
–克里斯托弗
2012年10月9日在18:53
由于JVM使用的默认语言而引起逗号,这可能与Nambari的语言不同。看看NumberFormat javadoc:docs.oracle.com/javase/1.4.2/docs/api/java/text/…
– Michael Zilbermann
2012年10月9日在18:54
正如zim2001所指出的,您的语言环境可能有所不同。阅读我的答案中提供的链接。最后,您将找到有关此信息。
–kosa
2012年10月9日在18:57
可选地,您可能希望在逗号前为数字大于3的数字添加另一个分隔符,然后使用以下NumberFormat formatter = new DecimalFormat(“#,000.00”); System.out.println(formatter.format(4.0));
–乔斯·姆兰加(Jose Mhlanga)
8月27日7:01
#2 楼
在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));
#3 楼
使用String.format:String.format("%.2f", 4.52135);
根据docs:
始终使用的语言环境是
Locale.getDefault()
返回的语言环境。 评论
String.format还接受语言环境作为第一个参数来说明十进制符号格式。
– Vincent Mimoun-Prat
2012年10月9日18:41
为了避免特定于语言环境的十进制符号(例如逗号),请指定美国语言环境:String.format(Locale.US,“%。2f”,4.52135);
–́Alexander233
17年9月22日在20:16
我会说“使用特定于美国语言环境的点作为小数点,请指定美国语言环境” ..这种认为美国习惯是正确的习惯,而其他一切都是“民间”东西的想法使我发疯。
–西蒙·詹尼
18年3月3日在12:05
@SimoneGianni不要做出愚蠢的假设,有些人可能需要使用小数点作为点。例如,我正在编写一个导出CSV文档的函数,但是我没有逗号,因为逗号是分隔符。
– Kaiser Keister
5月4日0:26
#4 楼
使用String.format,您可以执行以下操作:double price = 52000;
String.format("$%,.2f", price);
注意逗号,这与@Vincent的答案不同
输出:
,000.00
有关此主题的官方Java页面是格式化的一个好资源
#5 楼
您可以始终使用静态方法printf from System.out
-然后实现相应的格式化程序;这样可以节省其他示例需要您做的堆空间。 例如:
System.out.format("%.4f %n", 4.0);
System.out.printf("%.2f %n", 4.0);
节省堆空间,这是一个很大的好处,尽管如此,我认为该示例比可管理的示例要容易得多其他任何答案,尤其是因为大多数程序员都从C知道printf函数(尽管Java略微更改了函数/方法)。
评论
@Baz我是否在这里缺少关键细节,没有提到printStream。 OP向标准输出流请求格式化帮助(通过查看Java文档可以更轻松地解决)。说明。
–刘易斯·罗宾斯
2012年10月9日18:46
我的错。正在查看错误的javadoc版本(1.4)。顺便说一句:out是PrintStream。
–巴兹
2012年10月9日在18:47
@Baz不用担心。是的,我假设这就是您要引用的类,在我所有的书中,printf在System.out中都称为静态方法(因为这些方法是静态的)。
–刘易斯·罗宾斯
2012年10月9日在18:47
确切地说,printf是PrintStream的静态方法。看到这里;)但是+1。
–巴兹
2012年10月9日在18:52
@Baz从文档printStream类继承了System.out。我可能错了-尽管继承静态方法是很奇怪的(甚至可能)吗?你是,我希望是正确的。
–刘易斯·罗宾斯
2012年10月9日18:58
#6 楼
new DecimalFormat("#0.00").format(4.0d);
#7 楼
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
#8 楼
可以使用以下任意一种方法如果使用的是
java.text.DecimalFormat
DecimalFormat decimalFormat = NumberFormat.getCurrencyInstance();
decimalFormat.setMinimumFractionDigits(2);
System.out.println(decimalFormat.format(4.0));
OR
DecimalFormat decimalFormat = new DecimalFormat("#0.00");
System.out.println(decimalFormat.format(4.0));
如果要将其转换为简单的字符串格式
System.out.println(String.format("%.2f", 4.0));
以上所有代码将打印4.00
#9 楼
另一种方法是使用setMinimumFractionDigits
类中的NumberFormat
方法。这里基本上指定要在小数点后出现多少个数字。
因此输入
4.0
假设您指定的数量为2,则会产生4.00
。但是,如果您的
Double
输入包含的数量超过了指定的数量,它将采用指定的最小数量,然后再加一位四舍五入例如,指定最小数量为2的
4.15465454
将产生4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
在线尝试
#10 楼
您可以通过多种方式执行此操作。给出以下名称:假设您的原始编号得到以下名称:
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;
#11 楼
可以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));
}
}
#12 楼
首先导入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));
}
}
评论
问题不在于显示货币,而是通过使用格式化功能(如其他答案中所述)可以更准确地回答。
– yacc
15-10-27在23:29
#13 楼
您可以按照以下步骤进行操作:double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
评论
不起作用,因为它使用的是##而不是00
–华金·尤尔丘克(Joaquin Iurchuk)
15年6月29日在16:39
#14 楼
我知道这是一个古老的话题,但是如果您真的希望使用句点而不是逗号,只需将结果另存为X,00到字符串中,然后简单地将其更改一段时间即可得到X.00最简单的方法就是使用replace。
String var = "X,00";
String newVar = var.replace(",",".");
输出将是您想要的X.00。另外,为方便起见,您可以一次完成所有操作并将其保存到一个双变量中:
Double var = Double.parseDouble(("X,00").replace(",",".");
我知道此答复目前没有用,但也许有人检查该论坛的人员将寻找这样的快速解决方案。
评论
尝试使用String.format()或java.text.Format。可能重复显示仅在小数点后两位显示
将Double值格式化为2个小数位的最佳方法的可能重复项