如何将最后一个小数点舍入到两个小数点可以是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
请原谅这是一个错误的问题,应该以不同的方式处理。
答案 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;
}
答案 1 :(得分:0)
首先,您不希望将“money”存储为double值,而是将long
或Money
实例存储(如果您有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;
}
}