Подтвердить что ты не робот

Разделение двойных на целые и десятичные части

Я пытаюсь отделить двойное целое и десятичные части

Так, например, число 24.4 должно быть разделено на 24 и 4.

int integer = (int)number;
double decimal = number-(int)number;
System.out.println(decimal); 

Использование этого метода дает мне следующие значения:

integer = 24
decimal = 0.3999999999999986

Мне нужно, чтобы значение десятичного числа было 4.

Как можно устранить эту проблему?

4b9b3361

Ответ 1

Вы можете сделать строку split(...). А затем Integer parseInt(...), чтобы получить обратно два целочисленных компонента.

Ответ 2

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

Дело в том, что 24,4 не может быть точно представлено double - так что доля вашего числа на самом деле составляет около 0,3999....
Если вам нужно точное решение - вам следует использовать библиотеку, которая дает вам точные значения для десятичных дробей, например BigDecimal.

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

Если вы пока не можете понять эту статью - просто примите во внимание: если вам нужно точное значение - double не может предоставить его - и вам следует использовать библиотеку, если это так.

Ответ 3

В зависимости от количества десятичных цифр вы можете использовать этот метод:

double number = 24.4;

int integer = (int)number;
double decimal = (10 * number - 10 * integer)/10;

System.out.println(decimal); 

Объяснение: удалите десятичные точки, выполните вычитание и, наконец, верните десятичную точку обратно в исходное местоположение!

Ответ 4

! [Вот мое решение] [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

Ответ 5

Вот небольшой метод, который я написал для этого:

/**
 * 
 * @param n
 * @return 
 */
private static double getFractionalPart(double n) {     
    if (n > 0) {
        return n - Math.floor(n);
    } else {
        return ((n - Math.ceil(n)) * -1);
    }
}

Ответ 6

double number = 20.57;
Double.valueOf(String.valueOf(number)).intValue()

Ответ 7

float number = (float) 22.45;
int integer = (int)number;
double decimal = number-integer;
System.out.println(integer + "decimal" + decimal); 

Ответ 8

Сначала найдите число цифр после десятичной точки и с таким количеством 10, которое нужно умножить. например: x = 26.78621, а затем умножить на 100000 [здесь вы не можете размножаться, как x * 10, снова x * 10 и так далее (5 раз), в первый раз, когда вы умножаетесь на 10, это даст вам 267.862199999..] После умножения вычесть 2600000 из результата. вот ссылка вашего ответа, на которой у меня есть код.  fooobar.com/questions/70187/...

Ответ 9

Как указано в 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);

Ответ 10

Вы можете сделать это:

(val - val.longValue()) * 100

используйте 1000, чтобы получить 3 фракции:

например:

(1.2445 - 1) * 100 = 0.244

Ответ 11

Я нашел способ с небольшим количеством обходного пути, и я уверен, что это работает для всех случаев.

Кодекс говорит сам за себя.

        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