Есть ли замена длинного двойника в java?
Я читал о типах данных в C. Я обнаружил, что диапазон long double
больше, чем диапазон double
в java. Для очень большого числа мы можем использовать long double в C. Если я хочу сохранить тот же номер в java, что мы должны делать? какой тип данных мы можем использовать?
double в java занимает 8 байтов (64 бит) IEEE 754. Он охватывает диапазон от 4.94065645841246544e-324d до 1.79769313486231570e + 308d (положительный или отрицательный).
longdouble in c takes 10 bytes (80 bits)
Может ли кто-нибудь сказать мне, есть ли замена longdouble в java
Ответы
Ответ 1
Хотя это не замена, вы можете использовать java.lang.math.BigDecimal. Вы можете грубо хранить миллиард цифр, пока не закончите память. Его произвольный класс точности, он будет настолько большим, насколько хотелось бы, пока ваш компьютер не исчерпает память.
В соответствии с документацией BigDecimal:
Непрерывные знаковые числа с произвольной точностью. BigDecimal состоит из произвольного значения целочисленной целочисленной точности и неотрицательная 32-разрядная целочисленная шкала, которая представляет собой число цифры справа от десятичной точки. Число, представленное BigDecimal (unscaledValue/10scale). BigDecimal обеспечивает операции для базовой арифметики, масштабирование, сравнение, хеширование и форматирование.
Ответ 2
В Java нет прямой замены.
Вы можете использовать BigDecimal для этой цели.
Вы должны понимать, что чем больше ваша двойная ценность, тем больше потеряна точность, которую вы получите, используя ее в своих математических операциях. BigDecimal помогает вам осознать эту проблему.
Вот пример кода с BigDecimal:
String decimalString = "1423545135143513.523";
BigDecimal decimal = new BigDecimal(decimalString);
По этой ссылке вы можете найти много примеров с использованием класса BigDecimal.
Ответ 3
Что касается примитивного типа, то не существует ни одного из двух вариантов double и float, который обрабатывает с плавающей запятой.
Но BigDecimal может быть тем, что вы ищете.
Ответ 4
Документация BigDecimal состояний:
добавить (BigDecimal augend) Возвращает BigDecimal, значение которого (this + augend) и масштаб которого max (this.scale(), augend.scale()).
import java.math.BigDecimal;
public class AddTwoBigNumbers{
public static void main(String[] args) {
BigDecimal num1, num2;
num1 = new BigDecimal(50.00035);
num2 = new BigDecimal(100.0025);
Sum(num1, num2);
}
public static void Sum(BigDecimal val1, BigDecimal val2){
BigDecimal sum = val1.add(val2);
System.out.println("Sum of two BigDecimal numbers: "+ sum);
}
}
Ответ 5
Нет, но вы можете использовать собственный интерфейс Java для вызова собственного метода, который выполняет вычисления с использованием длинного двойного типа. Затем вы можете сохранить его в 10 байт или усечь его.
Если окончательное усечение удваивается, допустимо, в зависимости от виртуальной машины вы можете использовать промежуточные значения в любом случае. В этом случае вам не нужен собственный метод.