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

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

Как я могу получить целые и дробные части из double в JSP/Java? Если значение равно 3,25, то я хочу получить fractional =.25, whole = 3

Как мы можем это сделать в Java?

4b9b3361

Ответ 1

Google поможет вам, если вы используете правильные условия для поиска "получить дробную и целую часть из двойной Java"

http://www.java2s.com/Code/Java/Data-Type/Obtainingtheintegerandfractionalparts.htm

double num;
long iPart;
double fPart;

// Get user input
num = 2.3d;
iPart = (long) num;
fPart = num - iPart;
System.out.println("Integer part = " + iPart);
System.out.println("Fractional part = " + fPart);

Выходы:

Integer part = 2
Fractional part = 0.2999999999999998

Ответ 2

double value = 3.25;
double fractionalPart = value % 1;
double integralPart = value - fractionalPart;

Ответ 3

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

Используйте JSTL (просто снимите jstl-1.2.jar in /WEB-INF/lib) fmt taglib. Там <fmt:formatNumber> тег, который делает именно то, что вы хотите и довольно легко с помощью атрибутов maxFractionDigits и maxIntegerDigits.

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

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<%
    // Just for quick prototyping. Don't do this in real! Use servlet/javabean.
    double d = 3.25;
    request.setAttribute("d", d);
%>

<!doctype html>
<html lang="en">
    <head>
        <title>SO question 343584</title>
    </head>
    <body>
        <p>Whole: <fmt:formatNumber value="${d}" maxFractionDigits="0" />
        <p>Fraction: <fmt:formatNumber value="${d}" maxIntegerDigits="0" />
    </body>
</html>

Вывод:

Всего: 3

Фракция:.25

Что это. Не нужно массировать его с помощью необработанного кода 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= "+(int)frac);

Ответ 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

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

float fp = ip % 1.0f;

Ответ 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 вовлекает дальнейшую арифметику с плавающей запятой.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

<%
  double[] numbers = { 0.0, 3.25, 3.75, 3.5, 2.5, -1.5, -2.5 };
  pageContext.setAttribute("numbers", numbers);
%>

<html>
  <body>
    <ul>
      <c:forEach var="n" items="${numbers}">
        <li>${n} = ${fn:substringBefore(n, ".")} + ${n - fn:substringBefore(n, ".")}</li>
      </c:forEach>
    </ul>
  </body>
</html>

Ответ 12

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

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

Ответ 13

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

Например: Для числа -0,35

возвращает

Целочисленная часть = 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<=-0.0000001 && 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

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

(4 / 3) == 1
(-4 / 3) == -1

Литература:

Ответ 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

public class MyMain2 {
    public static void main(String[] args) {
        double myDub;
        myDub=1234.5678;
        long myLong;
        myLong=(int)myDub;
        myDub=(myDub%1)*10000;
        int myInt=(int)myDub;
        System.out.println(myLong + "\n" + myInt);
    }
}