129

我在格式化双精度的小数时遇到了一些问题。如果我有一个双精度值,例如 4.0,我如何格式化小数,使其改为 4.00?

4

14 回答 14

237

一种方法是使用NumberFormat

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

输出:

4.00

于 2012-10-09T18:38:18.743 回答
81

使用 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));
于 2012-10-09T18:38:01.813 回答
51

使用String.format

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

根据文档:

始终使用的语言环境是由Locale.getDefault().

于 2012-10-09T18:37:36.150 回答
22

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

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

请注意使这与@Vincent 的答案不同的逗号

输出:

$52,000.00

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

于 2016-03-18T22:09:41.867 回答
6

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

前任:

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

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

节省了堆空间,这是一个很大的好处,但我认为这个例子比任何其他答案都更易于管理,特别是因为大多数程序员都知道 C 中的 printf 函数(尽管 Java 稍微改变了函数/方法)。

于 2012-10-09T18:42:19.610 回答
4
double d = 4.0;
DecimalFormat nf = DecimalFormat.getInstance(Locale.ENGLISH);
System.out.println(nf.format("#.##"));
于 2012-10-09T19:00:26.890 回答
3
new DecimalFormat("#0.00").format(4.0d);
于 2012-10-09T18:39:34.640 回答
2

另一种方法是使用类中的setMinimumFractionDigits方法NumberFormat

在这里,您基本上可以指定要在小数点后出现多少个数字。

因此,假设您指定的数量为 2,则输入4.0将产生。4.00

但是,如果您的Double输入包含超过指定的数量,它将采用指定的最小数量,然后再加一位向上/向下舍入的数字

例如,4.15465454指定的最小数量为 2 将产生4.155

NumberFormat nf = NumberFormat.getInstance();
nf.setMinimumFractionDigits(2);
Double myVal = 4.15465454;
System.out.println(nf.format(myVal));

在线尝试

于 2017-11-01T08:42:21.730 回答
2

有很多方法可以做到这一点。这些在下面给出:

假设您的原始号码如下所示:

 double number = 2354548.235;

使用数字格式:

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

使用字符串格式:

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;
于 2019-04-07T04:50:20.290 回答
2

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

  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. 如果要将其转换为简单的字符串格式

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

以上所有代码将打印4.00

于 2019-08-15T14:44:40.323 回答
0

工作 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));
    }

}
于 2016-06-03T12:30:16.913 回答
-3

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

}
于 2015-10-27T22:59:23.017 回答
-4

你可以这样做:

double d = 4.0;
DecimalFormat df = new DecimalFormat("#.##");
System.out.print(df.format(d));
于 2012-10-09T18:39:29.503 回答
-4

我知道这是一个老话题,但如果你真的喜欢用句号而不是逗号,只需将你的结果保存为 X,00 到一个字符串中,然后只需将它更改一个句点,这样你就可以得到 X.00

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

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

输出将是您想要的X.00。另外,为了方便起见,您可以一次完成所有操作并将其保存到双变量中:

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

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

于 2015-12-02T19:43:10.733 回答