Я пытаюсь разделить число 19 ди git на 100 (19 ди git число / 100) на java - PullRequest
0 голосов
/ 12 февраля 2020

Я пытаюсь разделить число 19 ди git на 100, то есть 19 ди git число / 100, в java. Это может быть кратно, используя long тип данных, но я не получаю полное значение как 17 цифр и десятичную точку, сопровождаемую еще 2 цифрами. Вместо этого я получаю только 17 цифр, так как это был тип данных long, поэтому мне нужно математическое выражение типа * git.

long cardValue = ("1234567891234567891");

long divide = (cardValue/100);

System.out.println(divide);

Вывод: 12345678912345678

Мне нужно выводится как 12345678912345678.91

Ответы [ 4 ]

3 голосов
/ 12 февраля 2020

long s - большие целые числа, и когда вы делите одно на другое, вы используете целочисленное деление , которое пропускает все справа от десятичной точки.

Вы можете использовать BigDecimal вместо:

BigDecimal divide = new BigDecimal(String.valueOf(cardValue)).divide(new BigDecimal(100));
1 голос
/ 12 февраля 2020

Сначала вы делаете целочисленное деление, а затем ожидаете десятичное значение. В Java, 1234 / 10 приводит к 123, а не 123.4. Если вы хотите получить десятичный результат, сделайте одно из значений десятичным, то есть 1234.0 / 10 или 1234 / 10.0. Это даст 123,4

Что касается вашей проблемы, поскольку число очень велико, лучше использовать BigDecimal (не BigInteger, поскольку он снова выполнит целочисленное деление, а вам нужен десятичный результат). Итак, попробуйте

BigDecimal b = new BigDecimal("1234567891234567891");
BigDecimal res = b.divide(new BigDecimal("100"));

Или вы можете сделать однострочную строку как

new BigDecimal("1234567891234567891").divide(new BigDecimal("100"))

Во-первых, res = 12345678912345678.91, а другое также приведет к тому же. Примечание: хотя BigInteger и BigDecimal все включены в пакет java.math, но если возникает ошибка, импортируйте ее, используя import java.math.BigDecimal;

0 голосов
/ 12 февраля 2020

Переменная деления имеет тип long, что означает отсутствие десятичных дробей, только целочисленные значения. Если вы используете double, вы можете получить десятичные числа, но этот тип не обладает необходимой вам точностью в этом случае, потому что он дает до 15 значащих чисел.

Ваше единственное решение - использовать класс BigDecimal. Вы можете получить любые ди git номера, которые вы хотите. Мы использовали его для банков и бухгалтерских приложений, и легко понять, как с ним работать.

HTH

0 голосов
/ 12 февраля 2020

Целое и длинное не имеют десятичной точки. Вместо этого используйте двойной.

double a = 123456789.00
double answer = (a/100.00)

См. Примитивные типы данных в java.

Если вы хотите получить строку и хотите погрузиться, то используйте метод parseDouble(), чтобы преобразовать ее в удвоенную. После этого шага выполните деление.

...