问题描述
我正在尝试返回double / float值,但未添加尾随零。
我使用了NumberFormat,DecimalFormat,但是一旦我将double或float转换为结果,它将添加尾随零(这是预期的)。我想知道是否有办法防止这种情况发生。
private Double format (double input) {
NumberFormat nf = NumberFormat.getIntegerInstance(Locale.US);
Double result = null;
BigDecimal bd = new BigDecimal(input);
if(bd.intValue() > 99){
//(don't want to add trailing zeros here)
return (double)bd.intValue();
}else{
nf.setMinimumFractionDigits(1);
nf.setMaximumFractionDigits(1);
result = Double.parseDouble(nf.format(bd.doubleValue()));
}
return result;
P.S。我不想在这里返回字符串值。
解决方法
“尾随零”仅与浮点或双数的字符串表示有关。
由于尾随零不会影响数字的值,因此浮点数或双精度数中存储的数据保持不变。例如,“ 3.4”和“ 3.4000”是同一数字,只是该数字的两种不同表示形式,例如“ 3.4 e + 00”仍然是显示该数字的另一种方式。
,您可以使用 stripTrailingZeros
,它是Java中的内置方法,该方法在删除尾随零后返回BigDecimal
。
Double.valueOf(bd.stripTrailingZeros().toPlainString());
,
如果将int
值分配给double
变量,则默认情况下始终以尾随零表示。您有两种选择:
-
将其格式化为所需的字符串。
-
将其转换为
BigDecimal
,然后使用BigDecimal#stripTrailingZeros
获得BigDecimal
,且不带尾随零。import java.math.BigDecimal; public class Main { public static void main(String[] args) { double x = 5; System.out.println(x); BigDecimal y = BigDecimal.valueOf(x).stripTrailingZeros(); System.out.println(y); } }
输出:
5.0
5