По поводу двойных данных - PullRequest
1 голос
/ 02 марта 2010

У меня есть двойной переменный тест. Я хочу извлечь все цифры до десятичной точки и две цифры после десятичной запятой сохранить выходные данные в целочисленных переменных доллар, центы. как мне это сделать? Я не хочу, чтобы происходило какое-либо округление.

пример:

double test= 12.1234

выход

int dollar =12;
int cents =12;

double test =1235.0

выход

int dollar=1235
int cents =0

Ответы [ 6 ]

4 голосов
/ 02 марта 2010

Для валюты, особенно если вы не хотите округлять, вы должны использовать класс BigDecimal. Что-то вроде:

BigDecimal test = new BigDecimal("12.1234");
int dollar = test.intValue();
int cents = test.scaleByPowerOfTen(2).intValue() - dollar * 100;
2 голосов
/ 02 марта 2010

Вы можете сделать:

double test= 12.1234;
int dollar = (int) test;
int cents = (int) ((test-dollar) * 100);
1 голос
/ 02 марта 2010

Как насчет:

dollar = test;
test -= dollar;
cents = test * 100;

В строке 1 целочисленная часть теста (12) присваивается целому числу «доллар». Строка 2 удаляет 12 долларов из тестового значения. Строка 3 назначает 100-кратную дробную часть теста центам. Обратите внимание, что я здесь не округляюсь. Для этого вам необходимо:

cents = (test + 0.005) * 100
0 голосов
/ 02 марта 2010

Для двойных значений, больших 10^13, после условной десятичной точки не будет НИКАКИХ значимых цифр.

Не следует использовать double или float для представления финансовых сумм. Используйте int или long (соответственно масштабированный и с явной проверкой на переполнение) или BigDecimal.

0 голосов
/ 02 марта 2010
String[] s = Double.toString(test).split(".");
String dol = s[0];
String cent = s[1].substring(0,1);
0 голосов
/ 02 марта 2010

Как насчет этого? Вместо того, чтобы печатать значения, вы можете просто назначить их по своему усмотрению.

double d = 32.456;
System.out.println( (int)d );
System.out.println( d-(int)d);
...