Двойной с пользовательским количеством ноль после точки - PullRequest
1 голос
/ 18 марта 2019

У меня есть два Integer значения, и мне нужно создать Double значение из объединения этих двух значений следующим образом:

A.CB

где:

A - первое целочисленное значение B - второе целое значение C - нули соответствуют общей длине

По сути, CB всегда должен быть всего 9 цифрами, то есть, когда B = 1 мне нужно, чтобы C было 8 нулями, если B=100 мне нужно C, будет 6 ноль. Чтобы получить этот результат: 15.000000001 а также 17.000000100

Как лучше всего подойти к этой логике в коде? Я имею в виду, что я могу написать собственный метод для создания этой логики, но есть ли в Java что-то для этого случая, чтобы просто использовать его, не создавая пользовательских методов? Лучше, если это возможно без использования функций формата строки (чтобы не преобразовывать целочисленные значения в строку).

Ответы [ 3 ]

3 голосов
/ 18 марта 2019

Что-то вроде этого?

    int A = 123, B = 450;
    System.out.println(String.format("%.09f", A + 1e-9 * B));

Будет печатать

123.000000450

PS String.format требуется из-за вашего требования "завершающие нули после запятой".Эти нули на самом деле не существуют, поэтому вам нужен какой-то способ pad вашего вывода, и String.format - это удобный способ сделать это.Если вам просто нужно значение double, вам не нужно String.format.

2 голосов
/ 18 марта 2019

Разделить b / 1000000000.0:

int a = 12;
int b = 123;
double x = a + b / 1000000000.0;
System.out.println(x);

Напечатает:

12.000000123

Если длина b не превышает 9 цифр, вы получите то, что хотите.

0 голосов
/ 18 марта 2019
int a = 12;
int b = 123;

// How many digits in b?
int blen = (int)Math.log10(b);

// Make a string of zeros
String padding = "00000000".substring(blen);

System.out.println(a + "." + padding + b);

Это не сработает, если b будет очень большим, так как blen будет больше, чем padding, и поэтому подстрока не будет выполнена. Кроме того, отрицательный b все испортит.

...