Java 从双精度数据库中删除.0

Java 从双精度数据库中删除.0,java,double,long-integer,Java,Double,Long Integer,我试图动态显示字符串中的数字,因此如果数字有小数,则显示它们,如果没有小数,则不显示.0 示例:将5.5显示为5.5,将5.0显示为5 这就是我到目前为止得到的:(答案是双精度) 这项工作的罚款高达约1e18然后将出错,因为一个长期的最大规模。 那么,我如何在更大的数字(如5.43e86)上实现这一点呢 看 您可能只需要DecimalFormat(“0.0”)DecimalFormat建议是处理此问题的最简单方法。如果它们还不够,这里有另一个想法 如果您开始达到Java中原语可以表示的最大值,

我试图动态显示字符串中的数字,因此如果数字有小数,则显示它们,如果没有小数,则不显示.0

示例:将5.5显示为5.5,将5.0显示为5

这就是我到目前为止得到的:(答案是双精度)

这项工作的罚款高达约1e18然后将出错,因为一个长期的最大规模。 那么,我如何在更大的数字(如5.43e86)上实现这一点呢


您可能只需要DecimalFormat(“0.0”)

DecimalFormat建议是处理此问题的最简单方法。如果它们还不够,这里有另一个想法

如果您开始达到Java中原语可以表示的最大值,那么您可能需要转到和


尝试在BigDecimal和BigInteger上使用
BigDecimal.Tobiginger()
方法和
toString()
方法。

这不是一个好的解决方案 例如,如果使用新的DecimalFormat(“0.#”),则会丢失数据 PI=3.14,但在解析之后,您将获得3.1

使用eval%1的另一个解决方案?(int)d:d 这一次由于最大整数限制,再次丢失数据

我的解决方案可行,但这不是个好主意

res = removeLastChars(eval,".0");

private String removeLastChars(double eval, String text){

    String res = String.valueOf(eval);
    int length = text.length();

    if (res.length() > length){
        res = res.substring((res.length() - length), res.length()).equals(text)
                ? res.substring(0, (res.length() - length)) : res;
    }

    return res;
}

为什么不使用DecimalFormat呢?@EJP Math.floor()的可能副本也会返回一个double,因此.0将保留。我想您的意思是
新的DecimalFormat(“###”);
因为他不想看到小数点后的数字。谢谢!我在应用程序的其他地方使用了DeviceMalformat。应该已经想到了。回答得很好。@AlexR--如果答案=5.5.-1,#is“数字,零显示为不存在,那么将打印5(而不是5.0)和5.5,它仍将打印小数点后的0。不是他说的asks@Greg--我建议您尝试上面的代码。它完全符合OP的要求。这将使用德语区域设置打印
5.0
5,0
(Java build 1.6.0_24-b07)
double answer = 5.0;
DecimalFormat df = new DecimalFormat("###.#");
System.out.println(df.format(answer));
res = removeLastChars(eval,".0");

private String removeLastChars(double eval, String text){

    String res = String.valueOf(eval);
    int length = text.length();

    if (res.length() > length){
        res = res.substring((res.length() - length), res.length()).equals(text)
                ? res.substring(0, (res.length() - length)) : res;
    }

    return res;
}