Dubbel converteren naar float in Java

Ik ben geconfronteerd met een probleem met betrekking tot het converteren van doublenaar float. Eigenlijk bewaar ik een floatstype, 23423424666767, in een database, maar wanneer we gegevens uit de database in de onderstaande code krijgen, getInfoValueNumeric(), het is van doubletype. De waarde die we krijgen bevindt zich in de 2.3423424666767E13FORMULIER.

Dus hoe krijgen we een floatformaatgegevens zoals 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);
}

Antwoord 1, Autoriteit 100%

Geef gewoon je dubbel naar een drijver.

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

Merk ook op dat de primitieve typen geen oneindige set van cijfers kunnen opslaan:

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

Antwoord 2, Autoriteit 13%

Ik stel u aan om de waarde op te halen die is opgeslagen in de database als BigDecimal Type:

BigDecimal number = new BigDecimal("2.3423424666767E13");
int myInt = number.intValue();
double myDouble = number.doubleValue();
// your purpose
float myFloat = number.floatValue();

BigDecimal geeft u veel functionaliteiten.


Antwoord 3, Autoriteit 8%

Converteer doublenaar float

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

Converteer doublenaar float

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

Antwoord 4, autoriteit 6%

Dit is een leuke manier om het te doen:

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

als je d als primitief type hebt, voeg dan één regel toe:

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

Antwoord 5

Om uw vraag te beantwoorden over “2.3423424666767E13 converteren naar”
23423424666767″

U kunt een decimale opmaakvoor het opmaken van decimale getallen.

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

Uitvoer: 23423424666767


Antwoord 6

Conversie van double naar float zal een versmallende conversie zijn. Uit de doc:

Een afnemende primitieve conversie kan informatie verliezen over de
totale grootte van een numerieke waarde en kan ook precisie verliezen en
bereik.

Een versmallende primitieve conversie van dubbel naar zwevend wordt bepaald door
de IEEE 754 afrondingsregels (§4.2.4). Deze conversie kan verliezen
precisie, maar verlies ook bereik, wat resulteert in een float-nul van a
niet-nul dubbel en een float oneindig van een eindige dubbel. Een dubbele NaN
wordt omgezet in een float NaN en een dubbele oneindigheid wordt omgezet in de
hetzelfde ondertekende float oneindig.

Dus het is geen goed idee. Als je het nog steeds wilt, kun je het als volgt doen:

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

Antwoord 7

Het probleem is dat uw waarde niet nauwkeurig kan worden opgeslagen in het type drijvende komma met één precisie. Bewijs:

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
    }
}

Een ander ding is: je krijgt niet “2.3423424666767E13”, het is gewoon de visuele weergave van het nummer dat in het geheugen is opgeslagen. “Hoe u afdrukt” en “wat zich in het geheugen bevindt” zijn twee verschillende dingen. Het bovenstaande voorbeeld laat zien hoe u het getal als float kunt afdrukken, waardoor wetenschappelijke notatie die u kreeg, wordt vermeden.


Antwoord 8

Allereerst, het feit dat de waarde in de database een float is, betekent niet dat deze ook in een Java floatpast. Float is een afkorting voor floating point, en er bestaan verschillende soorten drijvende komma’s. Java-typen floaten doublezijn beide typen drijvende komma met verschillende precisie. In een database worden beide floatgenoemd. Aangezien doubleeen hogere precisie heeft dan float, is het waarschijnlijk een beter idee nietom uw waarde te casten naar een float, omdat je precisie zou kunnen verliezen.

U kunt ook BigDecimalgebruiken, die een willekeurig nauwkeurig getal vertegenwoordigen.


Antwoord 9

Gebruik dataType-casting. Bijvoorbeeld:

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

Proost!

Opmerking:

Gehele getallen zijn gehele getallen, bijv. 10, 400 of -5.

Drijvende-kommagetallen (floats) hebben decimalen en decimalen, bijvoorbeeld 12,5 en 56.7786543.

Dubbels zijn een specifiek type getallen met drijvende komma die een grotere nauwkeurigheid hebben dan standaard getallen met drijvende komma (wat betekent dat ze tot op een groter aantal decimalen nauwkeurig zijn).


Antwoord 10

Float.parseFloat(String.valueOf(uw_nummer)

Other episodes