JAVA:使用 DecimalFormat 时遇到问题?需要 30.40 而不是 30.4 [重复]

Posted

技术标签:

【中文标题】JAVA:使用 DecimalFormat 时遇到问题?需要 30.40 而不是 30.4 [重复]【英文标题】:JAVA: Having trouble using DecimalFormat? Need 30.40 not 30.4 [duplicate] 【发布时间】:2017-03-23 00:51:56 【问题描述】:

我目前有 switch 语句,可以根据工人的头衔随机生成薪水。一切正常,但我似乎无法正确截断薪水。

无论如何,我都需要薪水以两位小数结尾。它适用于像“57662.24”这样的薪水,但我也得到像“87756.4”这样的薪水,我需要是“87756.40”

我不确定我做错了什么,所以我希望能得到一些帮助!

// Method to return salary based on rank
private static Double salary(String rank) 

    // initialize variables for use in switch statement
    double sal = 0;
    Random random = new Random();
    DecimalFormat df = new DecimalFormat("###.00");

    switch (rank) 
    case "Assistant":
        sal = random.nextDouble() * (80000 - 50000) + 50000;
        break;

    case "Associate":
        sal = random.nextDouble() * (110000 - 60000) + 60000;
        break;

    case "Full":
        sal = random.nextDouble() * (130000 - 75000) + 75000;
        break;
    
    return sal = Double.valueOf(df.format(sal));

【问题讨论】:

【参考方案1】:

更改方法,使其返回由DecimalFormat 对象格式化的String

 private static String salary(double sal) 

    DecimalFormat df = new DecimalFormat("###.00");

    return (df.format(sal));
 

您努力对其进行格式化,然后再次将其设置为Double,从而失去了这种努力。

【讨论】:

@4castle - 感谢您的编辑。这是相当尴尬的混乱。【参考方案2】:

你想要的是

DecimalFormat df = new DecimalFormat("#.00"); 

【讨论】:

以上是关于JAVA:使用 DecimalFormat 时遇到问题?需要 30.40 而不是 30.4 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Java 中,我可以使用 DecimalFormat 在数字之间输入破折号 (-) 吗?

Java DecimalFormat 在执行指数符号时会产生错误

Java DecimalFormat 在格式化双精度时失去精度

Java DecimalFormat四舍五入的坑及正确用法

在 DecimalFormat 处将点更改为逗号

Java DecimalFormat:如何拒绝带有分组小数的“无效”输入?