source

Java에서 이중을 부동으로 변환

factcode 2022. 9. 3. 13:13
반응형

Java에서 이중을 부동으로 변환

변환과 관련된 문제에 직면해 있습니다.double로.float사실 저는 플로트 타입을 보관하고 있어요.23423424666767데이터베이스에서 아래 코드로 데이터를 가져오면getInfoValueNumeric(), 의doubletype. 우리가 얻을 수 있는 값은2.3423424666767E13형태.

그럼 어떻게 하면float데이터 포맷을 하다23423424666767?

2.3423424666767E13 to 23423424666767

public void setInfoValueNumeric(java.lang.Double value) {
    setValue(4, value);
}


@javax.persistence.Column(name = "InfoValueNumeric", precision = 53)
public java.lang.Double getInfoValueNumeric() {
    return (java.lang.Double) getValue(4);
}

2루타를 띄워라.

double d = getInfoValueNumeric();
float f = (float)d;

또한 원시 유형은 무한대의 숫자 집합을 저장할 수 없습니다.

float range: from 1.40129846432481707e-45 to 3.40282346638528860e+38
double range: from 1.7e–308 to 1.7e+308

데이터베이스에 저장된 값을 BigDecimal 유형으로 검색할 것을 권장합니다.

BigDecimal number = new BigDecimal("2.3423424666767E13");

int myInt = number.intValue();
double myDouble = number.doubleValue();

// your purpose
float myFloat = number.floatValue();

Big Decimal은 많은 기능을 제공합니다.

변환Double로.Float

public static Float convertToFloat(Double doubleValue) {
    return doubleValue == null ? null : doubleValue.floatValue();
}

변환double로.Float

public static Float convertToFloat(double doubleValue) {
    return (float) doubleValue;
}

좋은 방법은 다음과 같습니다.

Double d = 0.5;
float f = d.floatValue();

d를 기본 유형으로 사용하는 경우 한 줄만 추가합니다.

double d = 0.5;
Double D = Double.valueOf(d);
float f = D.floatValue();

더블에서 플로트로 변환하는 것은 좁혀지는 변환입니다.문서에서:

원시 변환을 좁히면 수치 전체의 크기에 대한 정보가 손실될 수 있으며 정밀도와 범위도 손실될 수 있습니다.

더블에서 플로트로의 좁혀지는 프리미티브 변환은 IEEE 754 반올림 규칙(θ4.2.4)에 의해 제어된다.이 변환은 정밀도를 잃을 수 있지만 범위도 잃을 수 있으며, 결과적으로 0이 아닌 2배에서 플로트 제로, 유한 2배에서 플로트 무한대가 발생합니다.이중 NaN을 플로트 NaN으로 변환하고 이중 무한을 동일 부호 플로트 무한으로 변환한다.

그래서 그것은 좋은 생각이 아니다.그래도 필요한 경우 다음과 같이 할 수 있습니다.

double d = 3.0;
float f = (float) d;

"2.342342466767E13을 2342342466767로 변환하는 방법"에 대한 질문에 답하려면

10진수 포맷에는 10진수 포맷을 사용할 수 있습니다.

     double d = 2.3423424666767E13;
     DecimalFormat decimalFormat = new DecimalFormat("#");
     System.out.println(decimalFormat.format(d));

출력: 2342342466767

문제는 단정도 부동 소수점 유형으로 값을 정확하게 저장할 수 없다는 것입니다.실증:

public class test{
    public static void main(String[] args){
        Float a = Float.valueOf("23423424666767");
        System.out.printf("%f\n", a); //23423424135168,000000
        System.out.println(a);        //2.34234241E13
    }
}

또, 「2.342342466767E13」은 표시되지 않습니다.메모리에 보존되어 있는 번호를 시각적으로 나타낼 뿐입니다.「인쇄 방법」과 「메모리에 있는 것」은 별개의 것입니다.위의 예에서는 숫자를 부동으로 인쇄하는 방법을 보여 줍니다.이렇게 하면 과학적 표기법을 사용할 필요가 없습니다.

우선, 데이터베이스의 값이 플로트라고 해서 자바에도 해당되지 않습니다.float플로트는 부동소수의 줄임말로 다양한 정밀도의 부동소수점이 존재한다.자바 타입float ★★★★★★★★★★★★★★★★★」double둘 다 정밀도가 다른 부동소수점 유형입니다.데이터베이스에서는 둘 다 호출됩니다.FLOAT .부터double float, 아마도 당신의 가치를 에 던지지 않는 것이 더 나은 생각일 것입니다.float이치

, 하다, 하다, 하다, 를 사용하셔도 됩니다.BigDecimal이것은 임의의 번호를 나타냅니다.

dataType 캐스팅을 사용합니다.예를 들어 다음과 같습니다.

// converting from double to float:
double someValue;
// cast someValue to float!
float newValue = (float)someValue;

건배!

주의:

정수는 10, 400 또는 -5와 같은 정수입니다.

부동 소수점 번호(플로트)에는 소수점 및 소수점 자릿수가 있습니다(예: 12.5 및 56.7786543).

더블은 표준 부동소수점수보다 정밀도가 높은 부동소수점수의 특정 유형입니다(소수점수가 많을수록 정확함).

Float.parseFloat(String.valueOf(your_number))

언급URL : https://stackoverflow.com/questions/32837783/convert-double-to-float-in-java

반응형