Как измениться 0.xxxx на xxxx в Java

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

  • 0.12 (точность: 3, scale:2)
  • 0.345 (точность: 4, scale:3)
  • 0.6789 (точность: 5, scale:4)

как я преобразовываю, они оценивают без жесткого кодирования значение точности и масштаб.

  • 0.12-> 12
  • 0.345-> 345
  • 0.6789-> 6789

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

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

7
задан ommar 29 July 2010 в 04:10
поделиться

5 ответов

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

BigDecimal a = new BigDecimal("0.0000012");
BigDecimal b = a.movePointRight(a.scale());
11
ответ дан 6 December 2019 в 10:47
поделиться

Умножаем на 10, пока trunc x = x.

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

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

while(Math.floor(val) != val)
    val *= 10.0;
4
ответ дан 6 December 2019 в 10:47
поделиться

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

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

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

3
ответ дан 6 December 2019 в 10:47
поделиться

Улучшение идеи Эмбер:

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

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

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

0.0012 -> 12
0.12   -> 12
0
ответ дан 6 December 2019 в 10:47
поделиться

Вы что-то вроде этого пытаетесь?

public static void main(String[] args) {
    double d = 0.1234;
    while(d>(long)d){
        d*=10;
    }
    System.out.println((long)d);
}
0
ответ дан 6 December 2019 в 10:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: