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

评论

尝试使用String.format()或java.text.Format。

可能重复显示仅在小数点后两位显示

将Double值格式化为2个小数位的最佳方法的可能重复项

#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(",",".");


我知道此答复目前没有用,但也许有人检查该论坛的人员将寻找这样的快速解决方案。