[java] JSP / Java의 double에서 전체 및 부분 부분을 어떻게 얻습니까?

JSP / Java의 double에서 전체 및 부분 부분을 어떻게 얻습니까? 값이 3.25이면을 얻고 싶습니다 fractional =.25.whole = 3

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


답변

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


답변

이 1 년 된 질문은 질문 주제를 수정 한 사람에 의해 시작되었고이 질문에으로 태그가 지정 jsp되었고 여기에 아무도 JSP 대상 답변을 제공 할 수 없었 으므로 여기에 JSP 대상 기여가 있습니다.

JSTL을 사용하십시오 ( jstl-1.2.jar/WEB-INF/lib) fmt taglib. <fmt:formatNumber>당신이 원하는 것을 정확히 maxFractionDigits하고 maxIntegerDigits속성의 도움으로 아주 쉬운 방식으로 하는 태그 가 있습니다 .

여기에 SSCCE가 있습니다. copy’n’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 코드를 사용하여 마사지 할 필요가 없습니다.


답변

원래 질문은 분수와 전체 부분이 아닌 지수와 가수를 요구했습니다.

double에서 지수와 가수를 얻으려면 IEEE 754 표현 으로 변환하고 다음 과 같이 비트를 추출 할 수 있습니다 .

long bits = Double.doubleToLongBits(3.25);

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


답변

주 논리는 먼저 소수점 뒤에 몇 자리가 있는지 찾아야합니다.
이 코드는 최대 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);


답변

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)두 부분을 원하는 이유에 따라 음수를 다르게 처리하고 싶을 수도 있습니다 .

이 가수와 지수를 부르지 말 것을 강력히 제안합니다.


답변

이것이 더 빠른지 모르겠지만 사용하고 있습니다.

float fp = ip % 1.0f;