返回没有尾随零的双精度类型
Posted
技术标签:
【中文标题】返回没有尾随零的双精度类型【英文标题】:Return double type without trialing zero 【发布时间】:2020-08-18 18:35:32 【问题描述】:我正在尝试返回双精度/浮点值,但没有添加尾随零。
我使用过 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;
附:我不想在这里返回字符串值。
【问题讨论】:
【参考方案1】:“尾随零”仅与浮点数或双精度数的字符串表示有关。
由于尾随零不会影响数字的值,因此存储在 float 或 double 中的数据保持不变。例如,“3.4”和“3.4000”是同一个数字,它只是这个数字的两种不同表示,比如“3.4 e+00”仍然是显示相同数字的另一种方式。
【讨论】:
使用 String.Format() 您可以轻松更改该数字的打印方式。【参考方案2】:您可以使用 stripTrailingZeros
,它是 Java 中的内置方法,在删除尾随零后返回 BigDecimal
。
Double.valueOf(bd.stripTrailingZeros().toPlainString());
【讨论】:
【参考方案3】:如果您将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
【讨论】:
以上是关于返回没有尾随零的双精度类型的主要内容,如果未能解决你的问题,请参考以下文章