2015-01-13 3 views
1

Как я могу раунд до двух знаков после запятой с последней десятичной точкой может быть либо 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

Пожалуйста, извините, если это неправильный вопрос, и следует подходить по-другому ,

+2

Это не то же самое, здесь ОП необходимо округлить к верхнему десятичному знаку. Он хочет, чтобы последнее десятичное число было либо 0, либо 5. –

+0

Это не вопрос, связанный с раундом, но как заставить его отображать, поскольку он выглядит как правильные деньги. – Pawan

+0

Итак, в каких случаях вы хотите, чтобы это было 0 или 5 в конце? Итак, 0, если он уже равен нулю в конце и 5 в конце для других? – ProgrammingIsAwsome

ответ

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 будет округлить до высшей десятой .. Пример 0,37 завершат до .40
+0

Большое спасибо, это именно то, что нужно. – Pawan

0

Во-первых, вы не хотите хранить свои «деньги» как двойное значение, но либо как long или как Money экземпляр (если у вас есть Java 8, в противном случае вы можете использовать BigDecimal). Тогда ваша проблема просто станет написанием $ part, а затем написанием округленной центральной части. Как вы хотите, чтобы округлить вверх до 5 центов, вы можете легко использовать следующий код:

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

Я оставлю остальную часть кода в качестве упражнения для читателя.

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; 
    } 
} 
+0

Обратите внимание на [Соглашения о присвоении имен Java] (http://www.oracle.com/technetwork/java/codeconventions-135099.html), и вам не нужно использовать тип оболочки 'Double' все время. Используйте примитивный тип 'double', если это возможно. – Tom

+0

Хорошо, спасибо за наблюдения! Я с нетерпением жду возможности улучшить свои будущие должности. – Darien

Смежные вопросы