Java 仅在需要时显示双精度小数

Java 仅在需要时显示双精度小数,java,android,double,decimal,string-formatting,Java,Android,Double,Decimal,String Formatting,我遇到了双精度(小数)的问题。 当double=1.234567时,我使用String.format(“%.3f”,myString) 结果是1.234 但是当我的双人号码是10时 结果将是10000 我希望这个是10 他们是不是说他只需要在“有用”时显示小数 我看到一些关于这方面的帖子,但那是php或c#,找不到android/java的相关内容(也许我看起来不太好) 希望你们能帮我解决这个问题 编辑,现在我使用如下内容:myString.replace(“,000”,”) 但我认为他们的代码

我遇到了双精度(小数)的问题。
当double=1.234567时,我使用
String.format(“%.3f”,myString)
结果是1.234

但是当我的双人号码是10时
结果将是10000
我希望这个是10

他们是不是说他只需要在“有用”时显示小数

我看到一些关于这方面的帖子,但那是php或c#,找不到android/java的相关内容(也许我看起来不太好)

希望你们能帮我解决这个问题

编辑,现在我使用如下内容:
myString.replace(“,000”,”)

但我认为他们的代码更“友好”一些。

不要使用双打。你可能会失去一些精确度。这是一个通用函数

public static double round(double unrounded, int precision, int roundingMode)
{
    BigDecimal bd = new BigDecimal(unrounded);
    BigDecimal rounded = bd.setScale(precision, roundingMode);
    return rounded.doubleValue();
}
你可以称之为

round(yourNumber, 3, BigDecimal.ROUND_HALF_UP);
“精度”是您想要的小数点数量


试试看

double amount = 1.234567 ;
  NumberFormat formatter = new DecimalFormat("##.###");
  System.out.println("The Decimal Value is:"+formatter.format(amount));
带#参数的方法是:

public static void main(String[] args) {

        double d1 = 1.234567;
        double d2 = 2;
        NumberFormat nf = new DecimalFormat("##.###");
        System.out.println(nf.format(d1));
        System.out.println(nf.format(d2));
    }
将导致

1.235
2

嘿,谢谢你的回复。我试过了,我现在得到(示例)从10000到10.0,仍然是一个小数点,知道如何“修复”这个吗?或者我做错了什么。同样,但发现了一些有趣的事情:当我得到这个数字123405并将“精度”设置为2时,它将变成123,4(这很好),但如果你得到一个“舍入”数字,它总是设置为0。所以10->10,0.jolivier的回答对我很有用,但谢谢你的帮助!(值得投赞成票)这感觉有点过头了。base10比base2或base3没有什么特别之处。一个笼统的“永远不要使用替身”感觉就像是一个不必要的缓慢和笨拙的程序食谱。如果你在测量金钱,那么一个双精度显然是不合适的,如果你在测量一堵墙的长度,那就好了(据我所知,BigDecimal会对一堵“三分之一米”长的墙产生问题,就像双精度一样)。这段代码没有考虑用户的区域设置。例如,在荷兰语言环境中,十进制数字应该写为“1235”而不是“1.235”。是的。“.”I give as parameter to The DecimalFormat并不意味着“write a dot”,它的意思是“write The decimal separator或monetary decimal separator”,请参见。我只是测试了一下,在函数开始时将默认语言环境设置为法语,结果输出中的点被comas有效地替换了。你是对的,对不起,我的错误。此代码根据用户的区域设置正确设置十进制分隔符的格式。这段代码也适用于我:NumberFormat.getNumberInstance().format(power))。它只是不允许设置精度。