2015-06-05 1 views
0

Я новичок в программировании на Java. Я хотел бы округлить цену до ближайших 2 десятичных знаков.Цена округления до ближайшего кратного 5cent в java

E.g.

38,82 в 38.80
38.87 в 38.90
38.85 остается неизменным. Я сделал, например. 1 и, например, 2, но он выходит только в 1 десятичном разряде. Например. 38,82 38,8

это мой код:

import java.text.DecimalFormat; 

public class RoundUp { 

    public static void main(String[] args){ 
     DecimalFormat df = new DecimalFormat("#.##"); 
     double num = 38.84; 
     System.out.println(df.format(Math.round(num*10.00)/10.00)); 
    } 
} 

Я посмотрел на другие модели ответов экспертов в этой сети, но ни один из них на самом деле не ответил на мой вопрос. Установив в 2 десятичных знака, я использую DemicalFormat. Это я знаю, но округляя число, скажем, 38,83 до 38,85 и 38,87 до 38,90 - это то, что я действительно хочу. Это система округления, которую использует моя страна. Может проверить это here.

И, пожалуйста, всем .. пожалуйста, не меняйте свой вопрос на дубликат. вы думаете, что его дублированный, пожалуйста, спросите меня, чтобы узнать больше. Я могу убедиться, что он не дублируется (я думаю ...)

+1

'Math.round (Num * 20,00) /20.00)' – Jesper

+0

Это был дан ответ раньше. Но не принимайте принятый ответ. Используйте самый проголосовавший ответ. http://stackoverflow.com/questions/2106615/round-bigdecimal-to-nearest-5-cents – Bobby

+0

привет @Bobby, я попробовал BigDecimal .. даже использовать методы ROUND_UP .. он не округляет числа .. но вместо этого я поднялся на 1 цент Например. 38.83 -> 38.84 – Wilz5363

ответ

2

Один из способов сделать это - преобразовать цену в центы, разделить на 5, округлить до, умножить на 5 и снова конвертировать в доллары :

double rounded = Math.round(num * 100.0/5.0) * 5.0/100.0; 
+0

Спасибо @Mureinik .. вы спасатель жизни .. что ответ !!! – Wilz5363

+0

: - Не могли бы вы рассказать мне, как вы пришли с этим ответом ?? – Wilz5363

+0

Надеюсь, вы, по крайней мере, считаете себя «100.0/5.0». Как [Jesper] (написал), это может быть написано «Math.round (num * 20.0)/20.0', экономя при этом ненужное исчисление для компьютера. Существует также более общий ответ (http://stackoverflow.com/a/16665378/1734119) по аналогичному вопросу. – Chop

2

Когда вы имеете дело с деньгами, вы должны избегать использования терки или двойных переменных и использовать целочисленный тип данных, а не для того, чтобы избежать проблем из-за того, что расчеты с плавающей точкой или двойных значений не являются точными.

Вы можете использовать следующее решение (при работе с межд):

public static int roundUp(int cents) { 
    int centsMod5 = cents%5; 
    if (centsMod5 > 0) { 
     cents += (5 - centsMod5); 
    } 
    return cents; 
}