Java - Как получить двойное от целого числа (деньги) - PullRequest
2 голосов
/ 13 октября 2011

Я получил:

int number = 1255; -> //It could also be 125(1€25Cent) or 10(10Cent) or 5(5Cent)

public double toMoney(int number)
{
...
}

в качестве возврата, я хочу получить двойное число: 12.55 или если ввод: 10, то: 00.10

Я знаю, что могу сделать с Модуло что-то вроде этого:

1255% 100 ... чтобы получить 55 .. Но как это сделать за 12 и в конце, как сформировать его как двойное число?

Ответы [ 6 ]

5 голосов
/ 13 октября 2011

Этот метод не должен существовать, потому что он не может дать правильные результаты.

Поскольку внутренне, double - это формат (двоичная с плавающей запятой), который не может точно представлять число, подобное0,1, 0,2 или 0,3 на всех .Прочитайте Руководство с плавающей точкой для получения дополнительной информации.

Если вам нужны десятичные дроби, ваш выходной формат должен быть BigDecimal или String.

4 голосов
/ 13 октября 2011

Способ печати денежных сумм должен выполняться с помощью класса NumberFormat!
Проверьте этот пример:

NumberFormat format = NumberFormat.getCurrencyInstance(Locale.FRANCE);
format.setCurrency(Currency.getInstance("EUR"));
System.out.println( format.format(13234.34) );

Какие распечатать этот вывод:

13 234,34 €

Вы можете попробовать разные локали и коды валют. Смотрите документы: http://download.oracle.com/javase/1.4.2/docs/api/java/text/NumberFormat.html.

3 голосов
/ 13 октября 2011

Если я правильно понимаю ваш вопрос, вы, вероятно, пытаетесь просто сделать это:

return (double)number / 100.;

Хотя и предупреждение: Вы не должны использовать плавающую точку для денег из-за проблем округления.

Если вы просто хотите напечатать число в денежном формате, вот 100% безопасный метод:

System.out.print((number / 100) + ".");
int cents = number % 100;
if (cents < 10)
    System.out.print("0");
System.out.println(cents);

Вероятно, это можно упростить намного лучше ... Конечно, вы можете пойти с BigDecimal, но ИМО разбивает муравья кувалдой.

2 голосов
/ 13 октября 2011
public double toMoney(int number)
{
    return number / 100.0;
}

PS Вы не должны использовать double для денежных значений, плохая идея.

2 голосов
/ 13 октября 2011
public double toMoney(int number)
{
return number / 100.0
}

Хитрость в том, чтобы использовать 100.0 вместо 100, чтобы заставить java использовать двойное деление.

2 голосов
/ 13 октября 2011
public double toMoney(int number)
{
  return number / 100.0;
}

Если вы имеете дело с денежными суммами, помните, что при преобразовании числа в double.

может произойти некоторая потеря точности
...