【问题标题】:Show decimal of a double only when needed仅在需要时显示双精度数的小数
【发布时间】:2012-08-06 10:23:44
【问题描述】:

我遇到了双(小数)的问题。
当 double = 1.234567 然后我使用String.format("%.3f", myString);
所以结果是 1.234

但是当我的双倍是 10
结果将是 10,000
我希望这是 10

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

我看到了一些关于这个的帖子,但那是 php 或 c#,找不到关于这个的 android/java 的东西(也许我看起来不太好)。

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

编辑,现在我使用这样的东西:myString.replace(",000", "");
但我认为他们是一个更“友好”的代码。

【问题讨论】:

    标签: java android double decimal string-formatting


    【解决方案1】:

    带有# 参数的DecimalFormat 是要走的路:

    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
    

    【讨论】:

    • 此代码未考虑用户的区域设置。例如,使用荷兰语语言环境,十进制数应该用逗号书写:“1,235”而不是“1.235”。
    • 是的。这 ”。”我给 DecimalFormat 作为参数并不意味着“写一个点”,它的意思是“写小数点分隔符或货币小数点分隔符”见docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html。我刚刚通过在函数开头将默认语言环境设置为法语进行了测试,并且正如预期的那样,输出中的点被有效地替换为逗号。
    • 你是对的,对不起,我的错。此代码根据用户的区域设置正确格式化小数分隔符。这段代码也适用于我:NumberFormat.getNumberInstance().format(power))。它只是不允许设置精度。
    【解决方案2】:

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

    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);
    

    “精度”是您想要的小数位数。

    Copy from Here.

    【讨论】:

    • 您好,谢谢您的回复。我试过了,我现在得到(示例)从 10,000 到 10.0 ,所以还是一位小数,知道如何“解决”这个问题吗?或者我做错了什么。
    • 相同,但发现了一些有趣的东西:当我得到这个数字 123,405 并将“精度”设置为 2 时,它会得到 123,4(这很好)但如果你得到一个“整数” , 它总是在它后面设置,0。所以 10 -> 10,0。
    • jolivier 的回答对我有用,但感谢您帮助我! (赞成票)
    • 这感觉有点过头了。 base10 与 base2 或 base3 相比没有什么特别之处。一条“从不使用双打”的毯子感觉就像是不必要的缓慢和尴尬程序的秘诀。如果您正在测量金钱,那么双倍显然是不合适的,如果您正在测量墙壁的长度,它很好(据我所知,BigDecimal 会遇到“三分之一米”长的墙壁的问题就像双倍一样)
    【解决方案3】:

    试试看

    double amount = 1.234567 ;
      NumberFormat formatter = new DecimalFormat("##.###");
      System.out.println("The Decimal Value is:"+formatter.format(amount));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-10
      • 2013-06-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多