如何显示最后两位数字,以使其有意义的钱

时间:2015-01-13 13:13:28

标签: java

如何将最后一个小数点舍入到两个小数点可以是0或5

import java.text.DecimalFormat;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class Test {

    public static void main(String args[]) {
        String selling_price_beMod = "23.31";
        double sell_price_d = Double.parseDouble(selling_price_beMod);
        String selling_price = round(sell_price_d);
        System.out.println(selling_price);
    }

    public static String round(double value) {

        DecimalFormat df = new DecimalFormat("#.00");
        return df.format(value);
    }

}

当我运行以下程序时,输出为

23.31

在这种情况下,我想让它显示为23.35

请原谅这是一个错误的问题,应该以不同的方式处理。

3 个答案:

答案 0 :(得分:2)

我认为这就是你想要的。请注意,您应该使用DecimalFormat来获得正确的格式,但无论如何这里有一个可以解决您的问题的算法:

public String roundNumber(double number)
{    
    int integer = Integer.parseInt(String.valueOf(number).split("\\.")[0]);
    String decimal = String.valueOf(number).split("\\.")[1];
    int decimalAsNumber = 0;

    if(!decimal.startsWith("0"))
        if(Integer.parseInt(decimal) < 10)
            decimalAsNumber = Integer.parseInt(decimal) * 10;
    else
        decimalAsNumber = Integer.parseInt(decimal);

    while(decimalAsNumber % 5 > 0)
        decimalAsNumber++;

    decimal = String.valueOf(decimalAsNumber);

    if(decimal.length() == 1)
        decimal += "0";

    return String.valueOf(integer) + "." + decimal;
}
  • 除非以0或5结尾,否则它将始终舍入为0. * 5。
  • 如果没有小数,它也会显示为.00
  • 如果它以%10 = 0结束,它将添加最后一个0以使其正确格式化。
  • 任何高于5的东西都会向上舍入到更高的十分之一。例如.37将向上舍入到.40

答案 1 :(得分:0)

首先,您不希望将“money”存储为double值,而是将longMoney实例存储(如果您有Java 8,则可以使用BigDecimal)。然后你的问题只是写出$ part,然后编写圆形的分数部分。如果你想要向上舍入到5美分,你可以轻松使用以下代码:

long roundedCents = (((price % 100) / 20 + 4) * 20) // rounds upwards to the next …0 or …5 value

我会把剩下的代码作为练习留给读者。

答案 2 :(得分:0)

这是我的第一篇帖子,所以如果这可能对您没有帮助,我很抱歉,但我尝试了类似这样的事情并且它正在工作:

public class Test 
{
  public static void main(String args[]) 
  {
    String selling_price_beMod = "23.31";
    Double sell_price_d = Double.parseDouble(selling_price_beMod);
    Double selling_price = round(sell_price_d);
    System.out.println(selling_price);
  }

  public static Double round(Double value) 
  {
    int last = (value * 100) %10 >= 5 ? 5 : 0;
    int nr = (int) (value * 10);

    return nr/10.00 + last / 100.00;
  }
}