Java中的双十进制格式
我在设置双精度小数的格式时遇到了一些问题。如果我有一个双精度值,例如4.0,如何设置小数的格式,使其改为4.00?使用:Java中的双十进制格式,java,formatting,double,decimal,Java,Formatting,Double,Decimal,我在设置双精度小数的格式时遇到了一些问题。如果我有一个双精度值,例如4.0,如何设置小数的格式,使其改为4.00?使用: String.format(“%.2f”,4.52135) 根据文件: 始终使用的区域设置是由locale.getDefault()返回的 使用Java 8,您可以使用格式方法..:- System.out.format("%.2f", 4.0); // OR System.out.printf("%.2f", 4.0); f用于浮点值 小数点后的2表示,后的小数位数
String.format(“%.2f”,4.52135)代码>
根据文件:
始终使用的区域设置是由locale.getDefault()
返回的
使用Java 8,您可以使用格式方法..:-
System.out.format("%.2f", 4.0); // OR
System.out.printf("%.2f", 4.0);
f
用于浮点值
- 小数点后的
2
表示,后的小数位数
对于大多数Java版本,您可以使用DecimalFormat
:-
DecimalFormat formatter = new DecimalFormat("#0.00");
double d = 4.0;
System.out.println(formatter.format(d));
其中一种方法是使用
输出:
4.00您可以按如下方式执行:
double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
您可以始终使用System.out中的静态方法printf
——然后实现相应的格式化程序;这节省了堆空间,其他示例需要您在其中执行此操作
例:
节省堆空间,这是一个相当大的好处,尽管如此,我认为这个示例比任何其他答案都更易于管理,特别是因为大多数程序员从C中知道printf函数(尽管Java稍微更改了函数/方法)。第一次导入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));
}
}
我知道这是一个老话题,但是如果你真的想用句点而不是逗号,只需将结果保存为X,00到一个字符串中,然后只需将其更改为句点,就可以得到X.00
最简单的方法就是使用replace
String var = "X,00";
String newVar = var.replace(",",".");
输出将是您想要的X.00。此外,为了方便起见,您可以一次完成所有操作并将其保存到双变量中:
Double var = Double.parseDouble(("X,00").replace(",",".");
我知道这个回复现在没有用,但可能有人检查了这个论坛,会寻找这样一个快速的解决方案。使用String.format,你可以这样做:
double price = 52000;
String.format("$%,.2f", price);
注意逗号,这与@Vincent的答案不同
输出:
52000.00美元
一个很好的格式化资源是关于该主题的java页面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
类中的setMinimumFractionDigits
方法
在这里,您基本上可以指定小数点后要显示的数字数量
因此,4.0
的输入将产生4.00
,假设您指定的金额为2
但是,如果您的Double
输入包含的金额超过指定的金额,它将采用指定的最小金额,然后再添加一个向上/向下四舍五入的数字
例如,指定最小数量为2的4.15465454
将产生4.155
NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));
有很多方法可以做到这一点。这些问题如下:
double number = 2354548.235;
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
假设您的原始编号如下所示:
double number = 2354548.235;
decimalFormat.setRoundingMode(RoundingMode.CEILING);
decimalFormat.setRoundingMode(RoundingMode.FLOOR);
decimalFormat.setRoundingMode(RoundingMode.HALF_DOWN);
decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
decimalFormat.setRoundingMode(RoundingMode.UP);
使用数字格式:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
System.out.println(String.format("%,.2f", number));
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
使用字符串。格式:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
System.out.println(String.format("%,.2f", number));
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
使用十进制格式和模式:
NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(number));
System.out.println(String.format("%,.2f", number));
NumberFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
DecimalFormat decimalFormatter = (DecimalFormat) nf;
decimalFormatter.applyPattern("#,###,###.##");
String fString = decimalFormatter.format(number);
System.out.println(fString);
使用十进制格式和模式
DecimalFormat decimalFormat = new DecimalFormat("############.##");
BigDecimal formattedOutput = new BigDecimal(decimalFormat.format(number));
System.out.println(formattedOutput);
在所有情况下,输出将为:
2354548.23
注意:
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
在舍入过程中,您可以在格式化程序中添加RoundingMode
。下面给出了一些取整模式:
double number = 2354548.235;
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));
或
如果要将其转换为简单的字符串格式
System.out.println(String.format("%.2f", 4.0));
以上所有代码都将打印4.00请尝试使用或。字符串可能重复的可能重复项。format还接受区域设置作为第一个参数,以说明小数点格式。为避免特定于区域设置的小数点符号(如逗号),请指定US区域设置:String.format(locale.US,“%.2f”,4.52135);我会说“要使用特定于美国语言环境的点作为小数点,请指定美国语言环境”。。我们的习惯是正确的,其他一切都是“民间”的想法让我发疯。@SimoneGianni不要做出愚蠢的假设,有些人可能需要小数点作为点。例如,我正在编写一个导出CSV文档的函数,而我不能使用逗号,因为逗号字符是分隔符。@Baz如果我缺少一个重要的细节,这里没有提到printStream。OP向标准输出流请求格式化帮助(通过查看Java文档可以更容易地解决这个问题)。解释一下,我的错。正在查看错误的javadoc版本(1.4)。顺便说一句:out
是PrintStream
@Baz不用担心。是的,我假设这就是您所指的类,在我所有的书中,printf被称为System.out中的静态方法(因为这些方法是静态的)。确切地说,printf
是PrintStream
的静态方法。见;)但是+1仍然存在。@Baz从文档中printStream类继承了System.out。我可能错了——尽管继承静态方法很奇怪(甚至可能吗)?你是,我希望你是对的。是的,但我不想要逗号,我想要一个小数点符号。我得到一个逗号。这就是我所做的。“双变量;NumberFormat formatter=new DecimalFormat(#0.00”);System.out.println(formatter.format(变量));由于JVM使用的默认语言可能与Nambari不同,因此您得到了一个逗号。请查看NumberFormat javadoc:正如zim2001所指出的,您的区域设置可能不同。请阅读我的答案中提供的链接。最后您将找到相关信息。您可能希望为di添加另一个分隔符在逗号前超过3个git,然后使用以下NumberFormat formatter=new DecimalFormat(“#,000.00”);System.out.println(formatter.format(4.0));
不起作用,因为它是