Java 删除';。0';从两倍开始,但保留所有其他可能性

Java 删除';。0';从两倍开始,但保留所有其他可能性,java,formatting,double,Java,Formatting,Double,我在Stackoverflow上看到了很多问题,都是指在双击后隐藏.0,但每个答案都说要使用DecimalFormat并执行.来隐藏它。但这不是我想要的 对于每一种可能的情况,如果双精度不以简单的.0结束,我希望它们保持现状。除非它以.0结尾,否则请将其删除。换句话说,我希望始终保持精度,除非以.0结尾 示例: 0.0000000000000000042345470000230 -> 0.0000000000000000042345470000230 0.4395083451 ->

我在Stackoverflow上看到了很多问题,都是指在双击后隐藏
.0
,但每个答案都说要使用DecimalFormat并执行
.
来隐藏它。但这不是我想要的

对于每一种可能的情况,如果双精度不以简单的
.0
结束,我希望它们保持现状。除非它以
.0
结尾,否则请将其删除。换句话说,我希望始终保持精度,除非以
.0
结尾

示例:

0.0000000000000000042345470000230 -> 0.0000000000000000042345470000230
0.4395083451 -> 0.4395083451
46547453.00024235 -> 46547453.00024235

435.0 -> 435
有什么办法可以做到这一点吗

进一步的例子:

这个问题有我所说的答案:

使用十进制

double answer = 5.0;
DecimalFormat df = new DecimalFormat("###.#");
System.out.println(df.format(answer));

上面的
#####
表示我将显示前3位数字,一个句点,然后是它后面的第一个数字。不管我的值是多少,只会格式化第一个小数。

事实上,它一点也不复杂。只需检查此项(它甚至可以为您提供最精确的数字):


stripTrailingZeros()
将删除任何纯0的痕迹,但如果存在其他数字,则保留格式。

为什么要进行向下投票?这个问题没有什么离题之处,因为它涉及到编程。此外,没有“最小可验证示例”,因为我不知道如何编写。这是一个有关格式的问题,而不是特定数据类型的问题。@hovercraftfullofels这些示例纯粹是示例。我提供的数字长度的愚蠢只是一个极端的例子,表明它们并没有以
.0
结尾。我知道它们实际上并不是按原样表示的。@frayment您有点困惑,如果您想将一个double作为一个整数来管理,那么您的方法是错误的。如果您使用它进行计算,请继续使用浮点数。然后,如果您需要将其打印到报表/用户界面中,然后使用一些很酷的类将其格式化为DecimalFormat。明白了,现在是开始使用BigDecimal的时候了。哦,我的天,这东西的精度是:OAlright,我刚刚试过,不得不用
setScale
设置精度,因为我使用的数字太长了。我使用了
d=d.setScale(10,RoundingMode.FLOOR)在一个数字上,它现在等于
500.0000000000
。我打印了这个,后面的零仍然存在?同样,这只是一个感知的问题,打印d.intValue(),你会得到500。@欧几里德是的,但这不是我想要的。这仍然会消除我的小数点痕迹。不管怎样,我找到了答案,只要使用
skipTrailingZeros()
。太好了!我很高兴你终于找到了。
//Square root of 5 will give you a lot of decimals    
BigDecimal d1 = new BigDecimal(sqrt(5));
//5 will give you none
BigDecimal d2 = new BigDecimal(5);
//Print and enjoy
System.out.println(d1.stripTrailingZeros());
System.out.println(d2.stripTrailingZeros());