Ответ 1
Вы можете сделать строку split(...)
. А затем Integer parseInt(...)
, чтобы получить обратно два целочисленных компонента.
Я пытаюсь отделить двойное целое и десятичные части
Так, например, число 24.4 должно быть разделено на 24 и 4.
int integer = (int)number;
double decimal = number-(int)number;
System.out.println(decimal);
Использование этого метода дает мне следующие значения:
integer = 24
decimal = 0.3999999999999986
Мне нужно, чтобы значение десятичного числа было 4.
Как можно устранить эту проблему?
Вы можете сделать строку split(...)
. А затем Integer parseInt(...)
, чтобы получить обратно два целочисленных компонента.
Это потому, что double
не совсем "действительные числа" - помните, что в любом диапазоне есть бесконечное число действительных чисел, в то время как в double
есть только конечное число - таким образом, конечное число значений, поэтому некоторые округляют должно произойти.
Дело в том, что 24,4 не может быть точно представлено double
- так что доля вашего числа на самом деле составляет около 0,3999....
Если вам нужно точное решение - вам следует использовать библиотеку, которая дает вам точные значения для десятичных дробей, например BigDecimal
.
Если вы хотите больше понять, что эта проблема double
не точна - вам следует прочитать больше об арифметике с плавающей запятой, и эта статья, хотя и высокого уровня, также является обязательной для того, чтобы действительно понять, что происходит.
Если вы пока не можете понять эту статью - просто примите во внимание: если вам нужно точное значение - double
не может предоставить его - и вам следует использовать библиотеку, если это так.
В зависимости от количества десятичных цифр вы можете использовать этот метод:
double number = 24.4;
int integer = (int)number;
double decimal = (10 * number - 10 * integer)/10;
System.out.println(decimal);
Объяснение: удалите десятичные точки, выполните вычитание и, наконец, верните десятичную точку обратно в исходное местоположение!
! [Вот мое решение] [1]
вот мое решение. Я использовал простой метод в программировании на C, чтобы разбить Дробные числа в двух разных целых числах... Ниже приведен код
#include<stdio.h>
void main()
{
float x=24.56; int y=(int)x; float z=(x-y)*1000000000; int zd=(int)z;
printf("%lf",x);
printf("\ninteger Part %d\n",y);
printf("\nDecimal Part %d\n",zd);
}
Выход
24.559999 целое число 24
Десятичная часть 559999488
Вот небольшой метод, который я написал для этого:
/**
*
* @param n
* @return
*/
private static double getFractionalPart(double n) {
if (n > 0) {
return n - Math.floor(n);
} else {
return ((n - Math.ceil(n)) * -1);
}
}
double number = 20.57;
Double.valueOf(String.valueOf(number)).intValue()
float number = (float) 22.45;
int integer = (int)number;
double decimal = number-integer;
System.out.println(integer + "decimal" + decimal);
Сначала найдите число цифр после десятичной точки и с таким количеством 10, которое нужно умножить. например: x = 26.78621, а затем умножить на 100000 [здесь вы не можете размножаться, как x * 10, снова x * 10 и так далее (5 раз), в первый раз, когда вы умножаетесь на 10, это даст вам 267.862199999..] После умножения вычесть 2600000 из результата. вот ссылка вашего ответа, на которой у меня есть код. fooobar.com/questions/70187/...
Как указано в RGO, вы можете сделать это, а также округлить десятичное число, чтобы получить соответствующее значение. Пример:
double number = 20.57;
int integer = (int)number;
double decimal = (10 * number - 10 * integer)/10;
double temp = Math.round(decimal*100.0)/100.0;
System.out.println("Int = " + integer + "\nDecimal = " + temp);
Вы можете сделать это:
(val - val.longValue()) * 100
используйте 1000, чтобы получить 3 фракции:
например:
(1.2445 - 1) * 100 = 0.244
Я нашел способ с небольшим количеством обходного пути, и я уверен, что это работает для всех случаев.
Кодекс говорит сам за себя.
double number = input.nextDouble(); // 234.025
String s = Double.toString(number); // "234.025"
s = "0" + s.substring(s.indexOf(".")); //"0.025"
double decimal = Double.parseDouble(s);// 0.025
int num = (int)number; // 234
System.out.println(decimal + " " + num); //0.025 234