Java 中的双十进制格式

我在格式化双精度小数时遇到了一些问题。如果我有一个双精度值,例如4.0,我如何格式化小数,以便它是4.00?

559862 次浏览

使用 格式:

String.format("%.2f", 4.52135);

根据文件:

始终使用的语言环境是 Locale.getDefault()返回的语言环境。

在 Java8中,您可以使用 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));

方法之一是使用 数字格式

NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(4.0));

产出:

四点

你可以这样做:

double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
new DecimalFormat("#0.00").format(4.0d);

您总是可以使用静态方法 printf from System.out-然后实现相应的格式化程序; 这节省了堆空间,其他示例需要您这样做。

例如:

System.out.format("%.4f %n", 4.0);


System.out.printf("%.2f %n", 4.0);

节省了堆空间,这是一个很大的额外收获,尽管如此,我仍然认为这个例子比其他任何答案都更容易管理,特别是因为大多数程序员都知道 printf 函数来自 C (Java 稍微改变了函数/方法)。

double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));

首先导入 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

最简单的方法就是使用替换。

String var = "X,00";
String newVar = var.replace(",",".");

输出将是您想要的 X00。另外,为了方便起见,你可以一次完成所有任务,并将其保存为一个双变量:

Double var = Double.parseDouble(("X,00").replace(",",".");

我知道这个回复现在是没有用的,但也许有人检查这个论坛将寻找一个像这样的快速解决方案。

使用 String.format,您可以这样做:

double price = 52000;
String.format("$%,.2f", price);

注意逗号,它使得这个问题与@Vincent 的答案不同

产出:

$52,000.00

一个很好的格式化资源是关于这个主题的 正式的 java 页面

百分百有效。

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方法。

这里基本上指定了小数点后要显示多少个数字。

因此,假设指定的数量为2,输入 4.0将产生 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));

上网试试

你有很多方法可以做到这一点,比如:

假设你的原始号码如下:

 double number = 2354548.235;

使用数字格式:

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;

您可以使用以下任何一种方法

  1. 如果您使用的是 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));
    
  2. If you want to convert it into simple string format

    System.out.println(String.format("%.2f", 4.0));
    

All the above code will print 4.00