在Java中定义双精度数字的小数位数

在Java中定义双精度数字的小数位数,java,double,Java,Double,我有一个愚蠢的问题 假设我有一个双倍的数字: double doubleValue=4.1; 有没有办法将此值表示为4.10但不是字符串而是双精度?如果要打印两个小数,请执行以下操作: double d = 4.10; DecimalFormat df = new DecimalFormat("#.00"); System.out.print(df.format(d)); 这将打印4.10,数字为双精度 下面是一个完整的工作示例,您可以编译并运行该示例以打印4.10: import ja

我有一个愚蠢的问题

假设我有一个双倍的数字:

double doubleValue=4.1;

有没有办法将此值表示为
4.10
不是字符串而是双精度?

如果要打印两个小数,请执行以下操作:

double d = 4.10;
 DecimalFormat df = new DecimalFormat("#.00");
 System.out.print(df.format(d));
这将打印
4.10
,数字为双精度

下面是一个完整的工作示例,您可以编译并运行该示例以打印4.10:

import java.text.DecimalFormat;

class twoDecimals {
    public static void main(String[] args) {
double d = 4.10;
 DecimalFormat df = new DecimalFormat("#.00");
 System.out.print(df.format(d));
}
}
即使你设定

double d = 4.1;
它将打印
4.10


如果设置
double d=4它将打印4.00,这意味着始终打印两个小数点

如果要打印两个小数点,请执行以下操作:

double d = 4.10;
 DecimalFormat df = new DecimalFormat("#.00");
 System.out.print(df.format(d));
这将打印
4.10
,数字为双精度

下面是一个完整的工作示例,您可以编译并运行该示例以打印4.10:

import java.text.DecimalFormat;

class twoDecimals {
    public static void main(String[] args) {
double d = 4.10;
 DecimalFormat df = new DecimalFormat("#.00");
 System.out.print(df.format(d));
}
}
即使你设定

double d = 4.1;
它将打印
4.10

如果设置
double d=4它将打印4.00,这意味着始终打印两个小数点

double doubleValue=4.1;

String.format(Locale.ROOT, "%.2f", doubleValue );
输出:

4.10
使用这种方法,您不需要使用
十进制格式
,这也将减少不必要的导入

只需这样做

double doubleValue=4.1;

String.format(Locale.ROOT, "%.2f", doubleValue );
输出:

4.10

使用这种方法,您不需要使用
十进制格式
,这也将减少不必要的导入

您无法定义数据类型的精度
double
。 如果需要定义十进制数的精度,可以使用类
BigDecimal
。 正如javadoc解释的,BigDecimal用于任意精度的有符号十进制数。 这是参考资料


您不能定义数据类型的精度
double
。 如果需要定义十进制数的精度,可以使用类
BigDecimal
。 正如javadoc解释的,BigDecimal用于任意精度的有符号十进制数。 这是参考资料


我不明白你为什么要在小数点后加上两位数字,用0来填补空白。你打算在什么地方展示它吗

答案是,不,你不能。

实际上,如果double之后没有任何0,则可以设置其精度

例如—

4.10000 // and you want to set the precision to 2 digits
// it will still give you 4.1 not 4.10

if it is 4.1 // and you want to set precision to 3 digits
// it will still give you 4.1 not 4.100

if it is 4.1234565 // and you want to set precision to 3 digits,
// it will give you 4.123
即使使用String.format对其进行格式化并将其更改回十进制,或使用BigDecimal的setScale方法设置精度, 无法获取小数点后以0结尾的双精度值

如果您想在某处显示特定的小数点,可以通过转换为字符串来实现

这里有两种方法可以做到这一点(将设置精度,但不会在末尾设置0以填补间隙)

一,

二,

将4.10作为字符串

double doubleValue=4.1;
String newValue = String.format( "%.2f", doubleValue );
System.out.println(newValue);

我不明白你为什么想要两位数,小数点后两位数,0填补空白。你打算在什么地方展示它吗

答案是,不,你不能。

实际上,如果double之后没有任何0,则可以设置其精度

例如—

4.10000 // and you want to set the precision to 2 digits
// it will still give you 4.1 not 4.10

if it is 4.1 // and you want to set precision to 3 digits
// it will still give you 4.1 not 4.100

if it is 4.1234565 // and you want to set precision to 3 digits,
// it will give you 4.123
即使使用String.format对其进行格式化并将其更改回十进制,或使用BigDecimal的setScale方法设置精度, 无法获取小数点后以0结尾的双精度值

如果您想在某处显示特定的小数点,可以通过转换为字符串来实现

这里有两种方法可以做到这一点(将设置精度,但不会在末尾设置0以填补间隙)

一,

二,

将4.10作为字符串

double doubleValue=4.1;
String newValue = String.format( "%.2f", doubleValue );
System.out.println(newValue);


4.1和4.10之间有什么区别?或者你想把4.1输出为4.10?是的!但不是像绳子一样!4.10应该是一个双倍数字我不认为这是可能的,因为4.10意味着4.1 jvm不会存储不必要的结尾0。你唯一能做的就是按照你想要的方式将十进制数格式化为字符串。4.1和4.10之间的区别是什么?或者你想把4.1输出为4.10?是的!但不是像绳子一样!4.10应该是一个双倍数字我不认为这是可能的,因为4.10意味着4.1 jvm不会存储不必要的结尾0。你能做的唯一一件事就是按照你想要的方式将十进制数格式化为字符串。它会打印4.10吗?如果设置为.00°\@Apurva,则该格式语法指示小数点后的精度位数。在本例中,它是两个。无法保证特定的输出,因为它依赖于区域设置。e、 g.切换到法语:
Locale.setDefault(Locale.French)之前,您将看到
4,10
。它将如何打印4.10?如果设置为.00°\@Apurva,则该格式语法指示小数点后的精度位数。在本例中,它是两个。无法保证特定的输出,因为它依赖于区域设置。e、 g.切换到法语:
Locale.setDefault(Locale.French)之前,您将看到
4,10
。无法保证特定的输出,因为它依赖于区域设置。e、 g.切换到法语:
Locale.setDefault(Locale.French)
之前,您将看到
4,10
。没有回答问题。这个答案随处可见。
String.format(Locale.ROOT,“%.2f”,doubleValue)
强制使用中性语言格式。@weston谢谢你的建议,我也学到了一些新东西。无法保证特定的输出,因为它依赖于语言环境。e、 g.切换到法语:
Locale.setDefault(Locale.French)
之前,您将看到
4,10
。没有回答问题。这个答案随处可见。
String.format(Locale.ROOT,“%.2f”,doubleValue)
强制使用中性语言格式。@weston谢谢你的建议,我也学到了一些新东西。