Java中的双十进制格式


Answers:


218

一种方法是使用NumberFormat

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

输出:

4.00


1
是的,但是我不需要逗号,我想要一个十进制符号。
Christoffer

我正在逗号。这就是我所做的。“双变量; NumberFormat格式化程序=新的DecimalFormat(“#0.00”); System.out.println(formatter.format(variable));
Christoffer 2012年

的输出是X,00而不是X.00
Christoffer

9
由于JVM使用的默认语言而引起逗号,这可能与Nambari的语言不同。看看NumberFormat javadoc:docs.oracle.com/javase/1.4.2/docs/api/java/text/…–
Michael Zilbermann

1
正如zim2001所指出的,您的语言环境可能有所不同。阅读我的答案中提供的链接。最后,您将找到有关此信息。
科萨2012年

73

使用Java 8,您可以使用formatmethod ..:-

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));

43

使用String.format

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

根据文档:

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


8
String.format还接受语言环境作为第一个参数来说明十进制符号格式。
Vincent Mimoun-Prat

4
为避免使用特定于语言环境的十进制符号(例如逗号),请指定美国语言环境:String.format(Locale.US,“%。2f”,4.52135);
Alexander233

3
我会说“使用美国语言环境专用的点作为小数点,指定美国语言环境” ..这种认为美国习惯是正确的习惯,而其他一切都是“民间”东西的想法使我发疯。
Simone Gianni

@SimoneGianni不要做出愚蠢的假设,有些人可能需要使用小数点作为点。例如,我正在编写一个导出CSV文档的函数,但是我没有逗号,因为逗号是分隔符。
Kaiser Keister

19

使用String.format,您可以执行以下操作:

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

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

输出:

$52,000.00

格式化的好资源是关于该主题的官方 Java页面


6

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

例如:

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

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

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


1
@Baz我是否在这里缺少关键细节,没有提到printStream。OP向标准输出流请求格式化帮助(通过查看Java文档可以更轻松地解决)。说明。
Lewis Robbins 2012年

我的错。正在查看错误的javadoc版本(1.4)。顺便说一句:outPrintStream
巴兹(Baz)2012年

@Baz不用担心。是的,我假设这就是您要引用的类,在我所有的书中,printf在System.out中都称为静态方法(因为这些方法是静态的)。
Lewis Robbins 2012年

1
确切地说,printf是的静态方法PrintStream。看到这里;)但是+1。
巴兹(Baz)2012年

@Baz从文档printStream类继承了System.out。我可能错了-尽管继承静态方法是很奇怪的(甚至有可能)吗?你是,我希望是正确的。
Lewis Robbins 2012年

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


1

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

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

所以输入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));

在线尝试


1

您可以通过多种方式执行此操作。以下是这些:

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

 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;

1

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

  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


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

}

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

}

1
问题不在于显示货币,而是通过使用格式化功能(如其他答案中所述)可以更准确地回答。
yacc

-4

您可以按照以下步骤进行操作:

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

1
不起作用,因为它##代替了00
Joaquin Iurchuk

-4

我知道这是一个老话题,但是如果您真的希望使用句点而不是逗号,只需将结果另存为X,00到字符串中,然后简单地将其更改一段时间即可得到X.00

最简单的方法就是使用replace。

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

输出将是您想要的X.00。为了使操作变得简单,您可以一次完成所有操作并将其保存到double变量中:

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

我知道此回复目前无济于事,但也许检查该论坛的人会寻找这样的快速解决方案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.