3 Java中的十进制精度

3 Java中的十进制精度,java,Java,这个问题的答案是0.25,但我想显示不超过3位小数的答案,比如0.250 如何做到这一点?请帮助?要获得十进制精度,请使用BigDecimal类。 小数位数可在setScale中指定,如下所示 Float x = 4; Float answer = 4/16; 一种可能的解决方案是使用toString()在小数点处使用split(“.”进行截断。如果结果字符串的长度小于3,请添加零,直到长度为3。如果大于3,则将其切断。例如: 公共字符串三精度(浮点){ 字符串tmp=floa

这个问题的答案是
0.25
,但我想显示不超过3位小数的答案,比如
0.250


如何做到这一点?请帮助?

要获得十进制精度,请使用
BigDecimal
类。 小数位数可在setScale中指定,如下所示

    Float x = 4;
    Float answer = 4/16;

一种可能的解决方案是使用
toString()
在小数点处使用
split(“.”
进行截断。如果结果字符串的长度小于3,请添加零,直到长度为3。如果大于3,则将其切断。例如:

公共字符串三精度(浮点){
字符串tmp=float.toString();
int length=tmp.split(“.”[1]。length();//小数后的数字
对于(int i=0;i<3-长度;i++){
tmp+=“0”;//追加零
}
返回tmp.substring(0,indexOf(“.”+3);//从小数点后3位开始
}

String.format(“%.3f”,答案)仅供参考:该代码不可编译。1)
4/16
为零(
0
),因为两个操作数都是整数,所以执行整数除法-至少一个数字必须是浮点,例如
(float)4/16
4F/16
;2) 由于结果是一个
int
,因此不能将其分配给
Float
(如果它是一个基元(
Float
),我建议使用BigDecimal。问题不是小数精度,它已经有了,但是用3个小数位数打印结果。@JoakimDanielson:我的答案是一般性的,而不是小数点后3位。使用格式化程序格式化它会将其转换为字符串,从而在操作数字时造成负担过重。另一方面,BigDecimal可以为给定的decimal进行自定义places@JoakimDanielson:我已经更新了我的答案,你能重新检查一下
BigDecimal吗?从Java9开始,舍入半舍五入甚至是
都是不推荐的,我们现在是Java13。自从
RoundingMode.HALF_偶数
从Java5开始就存在了,现在是开始使用它的时候了。我想知道例如
0.249999
会发生什么;(更不用说名为
float
的参数/变量)使用
split
indexOf
不是很好,原因几乎相同,而且我非常确定
split(“.”
不会做你认为的事情-
意味着正则表达式中的任何字符,你将得到一个空数组
BigDecimal a = new BigDecimal("0.25");
a = a.setScale(3, BigDecimal.ROUND_HALF_EVEN);