Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 大小数总是四舍五入到两位小数(即使我的大小数对象没有小数)?_Java_Rounding_Bigdecimal - Fatal编程技术网

Java 大小数总是四舍五入到两位小数(即使我的大小数对象没有小数)?

Java 大小数总是四舍五入到两位小数(即使我的大小数对象没有小数)?,java,rounding,bigdecimal,Java,Rounding,Bigdecimal,如何始终将BigDecimal对象四舍五入为2位小数(即使我的BigDecimal对象没有小数)? 我正在做: myBigDecimal.setScale(2, RoundingMode.HALF_UP); // works fine when it has decimals 上下文:我有一个POJO列表,当我发送到前端时,我会以ExtJs的格式给它们 但是 我还生成了一个CSV文件,要求所有的经济字段都有2位小数 有什么想法或解决办法吗 Thx您可以使用该类设置十进制数的格式。e、 g 代码

如何始终将BigDecimal对象四舍五入为2位小数(即使我的BigDecimal对象没有小数)?

我正在做:

myBigDecimal.setScale(2, RoundingMode.HALF_UP); // works fine when it has decimals
上下文:我有一个POJO列表,当我发送到前端时,我会以ExtJs的格式给它们

但是

我还生成了一个CSV文件,要求所有的经济字段都有2位小数

有什么想法或解决办法吗

Thx

您可以使用该类设置十进制数的格式。e、 g

代码

public static void main(String[] args) {
    DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    symbols.setDecimalSeparator('.');
    DecimalFormat formatter = new DecimalFormat("#.00", symbols);
    System.out.println(formatter.format(BigDecimal.valueOf(12.456)));
    System.out.println(formatter.format(BigDecimal.valueOf(12L)));
}
12.46
12.00
输出

public static void main(String[] args) {
    DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    symbols.setDecimalSeparator('.');
    DecimalFormat formatter = new DecimalFormat("#.00", symbols);
    System.out.println(formatter.format(BigDecimal.valueOf(12.456)));
    System.out.println(formatter.format(BigDecimal.valueOf(12L)));
}
12.46
12.00
有关详细信息,请参见。

您可以使用该类设置十进制数的格式。e、 g

代码

public static void main(String[] args) {
    DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    symbols.setDecimalSeparator('.');
    DecimalFormat formatter = new DecimalFormat("#.00", symbols);
    System.out.println(formatter.format(BigDecimal.valueOf(12.456)));
    System.out.println(formatter.format(BigDecimal.valueOf(12L)));
}
12.46
12.00
输出

public static void main(String[] args) {
    DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    symbols.setDecimalSeparator('.');
    DecimalFormat formatter = new DecimalFormat("#.00", symbols);
    System.out.println(formatter.format(BigDecimal.valueOf(12.456)));
    System.out.println(formatter.format(BigDecimal.valueOf(12L)));
}
12.46
12.00
更多信息请参阅

我正在生成一个CSV文件

这意味着您不是在处理舍入问题,而是在处理格式问题。换句话说,实际数字的小数点后有多少位数无关紧要:您只需要在生成的文本文件中输入正确的位数即可

我被要求所有的经济领域都有2位小数

一种方法是使用
printf
的格式化功能:

BigDecimal bd = BigDecimal.valueOf(12.5);
System.out.printf("%.2f", bd);

我正在生成一个CSV文件

这意味着您不是在处理舍入问题,而是在处理格式问题。换句话说,实际数字的小数点后有多少位数无关紧要:您只需要在生成的文本文件中输入正确的位数即可

我被要求所有的经济领域都有2位小数

一种方法是使用
printf
的格式化功能:

BigDecimal bd = BigDecimal.valueOf(12.5);
System.out.printf("%.2f", bd);

换句话说,你只是说如果你的BigDecimal是10,你想要10.00,但它不产生小数?真的吗?换句话说,你只是说如果你的大十进制是10,你想要10.00,而它不产生小数?真的吗?好吧,但是我得到的是12.00而不是12.00,你知道为什么吗?我没有配置任何特定的区域设置。是的,它是针对您的区域设置的@Ingo我也有同样奇怪的地方..检查一下这个安静,好吧,但我得到的是12,00而不是12.00,你知道为什么吗?我没有配置任何特定的区域设置。是的,它是针对您的区域设置的@Ingo我也有同样奇怪的地方..检查这个安静的地方