SO question 343584

Как получить целые и дробные части из двух в JSP/Java?

Поскольку этот 1-летний вопрос был поднят кем-то, кто исправил тему вопроса, и этот вопрос был помечен jsp , и никто здесь не смог дать целевой ответ JSP, вот мой JSP-целевой вклад.

Здесь SSCCE, просто скопируйте’paste’n’run.

       

Whole: " maxFractionDigits="0" />

Fraction: " maxIntegerDigits="0" />

Что это. Не нужно массировать его с помощью необработанного кода Java.

Ответ 4

Первоначальный вопрос задал экспоненту и мантиссе, а не дробную и целую часть.

Чтобы получить показатель экспоненты и мантиссы из двойника, вы можете преобразовать его в представление IEEE 754 и извлечь такие биты:

long bits = Double.doubleToLongBits(3.25); boolean isNegative = (bits & 0x8000000000000000L) != 0; long exponent = (bits & 0x7ff0000000000000L) >> 52; long mantissa = bits & 0x000fffffffffffffL; 

Ответ 5

Основная логика вам нужно сначала узнать, сколько цифр есть после десятичной точки.
Этот код работает для любого числа до 16 цифр. Если вы используете BigDecimal, вы можете запустить его только для до 18 цифр. поместите входное значение (ваш номер) в переменную «num», здесь в качестве примера я ее закодировал.

double num, temp=0; double frac,j=1; num=1034.235; // FOR THE FRACTION PART do< j=j*10; temp= num*j; >while((temp%10)!=0); j=j/10; temp=(int)num; frac=(num*j)-(temp*j); System.out.println("Double number= "+num); System.out.println("Whole part= "+(int)num+" fraction part post-104 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized"> 

Ответ 6

Мантисса и показатель числа двойных чисел с плавающей запятой IEEE являются такими значениями, что

value = sign * (1 + mantissa) * pow(2, exponent) 

если мантисса имеет форму 0.101010101_base 2 (т.е. ее самый сильный бит смещается после двоичной точки), а показатель экспоненты корректируется для смещения.

Начиная с версии 1.6, java.lang.Math также предоставляет прямой метод для получения несмещенного экспоненты (называемый getExponent (double))

Однако числа, которые вы запрашиваете, являются интегральной и дробной частью числа, которые можно получить с помощью

integral = Math.floor(x) fractional = x - Math.floor(x) 

хотя вы можете по-разному относиться к отрицательным числам (floor(-3.5) == -4.0) , в зависимости от того, зачем вам нужны две части.

Я бы сказал, что вы не называете эту мантию и экспонента.

Ответ 7

Не знаю, работает ли это быстрее, но я использую

Ответ 8

[Изменить: вопрос первоначально задавался вопросом, как получить мантиссы и экспонента.]

Где n - это число, чтобы получить реальный показатель мантиссы/экспонента:

exponent = int(log(n)) mantissa = n / 10^exponent 

Или, чтобы получить ответ, который вы искали:

exponent = int(n) mantissa = n - exponent 

Это не Java точно, но их легко конвертировать.

Ответ 9

Целочисленная часть получается из простого приведения и дробного разделения строк:

double value = 123.004567890 int integerPart = (int) value; // 123 int fractionPart = Integer.valueOf(String.valueOf(value) .split(".")[1]); // 004567890 /** * To control zeroes omitted from start after parsing. */ int decimals = String.valueOf(value) .split(".")[1].length(); // 9 

Ответ 10

Что делать, если ваш номер равен 2.39999999999999. Я полагаю, вы хотите получить точное десятичное значение. Затем используйте BigDecimal:

Integer x,y,intPart; BigDecimal bd,bdInt,bdDec; bd = new BigDecimal("2.39999999999999"); intPart = bd.intValue(); bdInt = new BigDecimal(intPart); bdDec = bd.subtract(bdInt); System.out.println("Number : " + bd); System.out.println("Whole number part : " + bdInt); System.out.println("Decimal number part : " + bdDec); 

Ответ 11

Так как тег fmt:formatNumber не всегда дает правильный результат, вот еще один подход JSP: он просто форматирует число как строку и выполняет остальную часть вычисления в строке, поскольку это проще и doesn 't вовлекает дальнейшую арифметику с плавающей запятой.

Ответ 12

Многие из этих ответов имеют ужасные ошибки округления, потому что они отливают числа от одного типа к другому. Как насчет:

double x=123.456; double fractionalPart = x-Math.floor(x); double wholePart = Math.floor(x); 

Ответ 13

Принятый ответ плохо работает для отрицательных чисел от -0 до -1.0 Также дайте дробную часть отрицательной.

Целочисленная часть = 0 Дробная часть = -0,35

Если вы работаете с координатами GPS, лучше иметь результат с signum на целой части как:

Целочисленная часть = -0 Дробная часть = 0,35

Цифры данных используются, например, для GPS-координат, где важны signum для Lat или Long position

 double num; double iPart; double fPart; // Get user input num = -0.35d; iPart = (long) num; //Correct numbers between -0.0 and -1.0 iPart = (num-1.0)? -iPart : iPart ; fPart = Math.abs(num - iPart); System.out.println(String.format("Integer part = %01.0f",iPart)); System.out.println(String.format("Fractional part = %01.04f",fPart)); 
Integer part = -0 Fractional part = 0,3500 

Ответ 14

Начиная с Java 8, вы можете использовать Math.floorDiv .

Он возвращает наибольшее (ближайшее к положительной бесконечности) значение int , меньшее или равное алгебраическому отношению.

floorDiv(4, 3) == 1 floorDiv(-4, 3) == -2 

В качестве альтернативы можно использовать оператор / :

Ответ 15

Я бы использовал BigDecimal для решения. Вот так:

 double value = 3.25; BigDecimal wholeValue = BigDecimal.valueOf(value).setScale(0, BigDecimal.ROUND_DOWN); double fractionalValue = value - wholeValue.doubleValue(); 

Ответ 16

String value = "3.06"; if(!value.isEmpty())< if(value.contains("."))< String block = value.substring(0,value.indexOf(".")); System.out.println(block); >else < System.out.println(value); >> 

Ответ 17

Источник

Get Mantissa and exponent from double?

send pies

posted 15 years ago

  • Report post to moderator
  • How do I got Mantissa and exponent from double?

    For eg.
    * If the value is 15.0E0 then I want to get mantissa =.25000, exponent = 2
    * If the value is 1.3E-3 then I want to get mantissa = .13000, exponent = -2

    How can we do this in java? Any pointers is highly appreciated.

    send pies

    posted 15 years ago

  • Report post to moderator
  • There are some typo, here is the correct one:

    How do I get Mantissa and exponent from double?

    For eg.
    * If the value is 15.0E0 then I want to get mantissa =.15000, exponent = 2
    * If the value is 1.3E-3 then I want to get mantissa = .13000, exponent = -2

    How can we do this in java? Any pointers is highly appreciated.

    Marshal

    send pies

    posted 15 years ago

  • Report post to moderator
  • I think you would have to use Math#log to get the exponent, then divide. Remember that double numbers are stored as binary mantissa and exponent and 0=positive, 1=negative.

    author and iconoclast

    Chrome

    send pies

    posted 15 years ago

  • Report post to moderator
  • Yes. You could also look at the Double.doubleToLongBits() method, which gives you the exact bit representation of the double. You can then use bit masks and shift operators to extract the values you're after.

    send pies

    posted 15 years ago

    • 1
  • Report post to moderator
  • But it does not return 0.15 as mantissa and 2 as exponent.

    Marshal

    send pies

    posted 15 years ago

  • Report post to moderator
  • Originally posted by Ernest Friedman-Hill:
    Yes. You could also look at the Double.doubleToLongBits() method, which gives you the exact bit representation of the double. You can then use bit masks and shift operators to extract the values you're after.

    But that would give mantissa and exponent in binary, and it would also miss out the extra 1. which is added to the mantissa.

    Источник

    separate mantissa and exponent of a double

    hi every one . thanks for comming to this thread . Dose any one know how to separate mantissa and exponent of a double and store them in two integers? .

    • 4 Contributors
    • 4 Replies
    • 1K Views
    • 1 Year Discussion Span
    • Latest Post 16 Years Ago Latest Post by Melldrin

    I'm not sure if this is exactly what you're talking about, but here it is.

    All 4 Replies

    I thought that was a very good solution myself, but if you want another way, you could throw it into a string and parse it.

    hi every one . thanks for comming to this thread . Dose any one know how to separate mantissa and exponent of a double and store them in two integers? .

    long bits = Double.doubleToLongBits(5894.349580349); boolean negative = (bits & 0x8000000000000000L) != 0; long exponent = bits & 0x7ff0000000000000L >> 52; long mantissa = bits & 0x000fffffffffffffL;

    Note that the mantissa is actually 52 bits in a double, and shouldn't ever be put in an integer without making sure it fits first. The exponent is small enough. Hope that helps.

    We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.

    Reach out to all the awesome people in our software development community by starting your own topic. We equally welcome both specific questions as well as open-ended discussions.

    Источник

    Читайте также:  Php date and time timezone
    Оцените статью