如何解决返回双型而不尝试零
我正在尝试返回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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。