Java中的双十进制格式

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表示,后的小数位数

我在设置双精度小数的格式时遇到了一些问题。如果我有一个双精度值,例如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
    表示,
    后的小数位数
对于大多数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));
    不起作用,因为它是