Как изменить 0.xxxx на xxxx в Java - PullRequest
7 голосов
/ 29 июля 2010

Как уже упоминалось выше.Я приведу один пример, скажем, все тестовые значения меньше 1, но больше 0.

  • 0,12 (точность: 3, масштаб: 2)
  • 0,345 (точность: 4, масштаб: 3)
  • 0,6789 (точность: 5, масштаб: 4)

как преобразовать эти значения без жесткого определения масштаба и точностизначение.

  • 0,12 -> 12
  • 0,345 -> 345
  • 0,6789 -> 6789

для 0,1 и 0,01 и 0,001должен получить 1 (я знаю, что это плохая идея, но мне дали наборы бизнес-правил программного обеспечения )

Я предпочитаю решение в Java, но если есть математический алгоритм, лучше,спасибо.

Ответы [ 5 ]

11 голосов
/ 29 июля 2010

Решение намного проще, чем кто-либо из представленных здесь. Вы должны использовать BigDecimal:

BigDecimal a = new BigDecimal("0.0000012");
BigDecimal b = a.movePointRight(a.scale());
4 голосов
/ 29 июля 2010

Умножьте на 10 до усечения x = x.

Что-то вроде (непроверенный код):

double val = ... ; // set the value.

while(Math.floor(val) != val)
    val *= 10.0;
3 голосов
/ 29 июля 2010

Один из вариантов - просто преобразовать в строку, разделить на десятичную точку и перевести часть после нее обратно в целое число:

Integer.parseInt((Double.toString(input_val).split('\\.'))[1])

(Примечание: вы можете захотеть сделатьнекоторая проверка ошибок как часть процесса; вышеприведенный пример кода является сжатой версией, просто разработанной для передачи сути.)

0 голосов
/ 29 июля 2010

Вы пытаетесь что-то подобное?

public static void main(String[] args) {
    double d = 0.1234;
    while(d>(long)d){
        d*=10;
    }
    System.out.println((long)d);
}
0 голосов
/ 29 июля 2010

Совершенствование идеи Амбер:

//for 0 <= x < 1
Integer.parseInt((Double.toString(x).replaceFirst("0.", ""));

Хорошо работает при любом значении ниже 1. Любое значение 1 и выше вызовет java.lang.NumberFormatException

Редактировать: Может кто-нибудь сказать мне разницу, если данные, как показано ниже?

0.0012 -> 12
0.12   -> 12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...