Java: Hoe stel ik Precisie in voor dubbele waarde?

Ik was onlangs aan het werken met getallen en ik had een situatie waarin ik de precisie van een dubbele waarde wil instellen op bijvoorbeeld 6 cijfers of 4 cijfers, afhankelijk van de waarde die is opgeslagen in de database.

Bijvoorbeeld, als in de database de precisie is ingesteld op 4 cijfers, dan moet de uitvoer eruit zien als,

10.0000.

Ik heb geprobeerd met DecimalFormat en de string ##.#### te gebruiken, maar het is vervelend om steeds symbolen te gebruiken.

Is er een betere aanpak, bijvoorbeeld iets als hieronder:

Double value = 10.0;
value.setPrecision(4);
Oplossing

Je kunt de precisie van een double (of Double) niet instellen op een gespecificeerd aantal decimale cijfers, omdat floating-point waarden geen decimale cijfers hebben. Zij hebben binaire cijfers.

U zult moeten converteren naar een decimale radix, hetzij via BigDecimal of DecimalFormat, afhankelijk van wat u later met de waarde wilt doen.

Zie ook mijn antwoord op deze vraag voor een weerlegging van de onvermijdelijke *100/100 antwoorden.

Commentaren (0)

De precisie van double en float wordt bepaald door hun grootte en de manier waarop de IEEE floating point types zijn geïmplementeerd.

Het aantal decimale cijfers in de uitvoer, daarentegen, is een kwestie van opmaak. U hebt gelijk dat het een slecht idee is om steeds dezelfde constante te typen. U zou in plaats daarvan een stringconstante moeten declareren, en de symbolische representatie daarvan gebruiken.

private static final String DBL_FMT = "##.####";

Door een symbolische voorstelling te gebruiken, kan je de precisie veranderen op alle plaatsen waar de constante gebruikt wordt, zonder je code te moeten doorzoeken.

Commentaren (0)

Om op @EJP voort te borduren, het concept van 'precisie'bij het omgaan met dubbels is uiterst beladen. Zoals besproken in https://stackoverflow.com/a/3730040/390153 kun je zelfs 0,1 niet voorstellen als een dubbel, ongeacht de precisie, om dezelfde reden waarom je 1/3 niet kunt voorstellen in basis 10 met eindige precisie.

Je moet het probleem dat je probeert op te lossen in overweging nemen, en overwegen:

a) Moet ik überhaupt wel dubbelen gebruiken; als precisie een relevant concept is, dan kan het gebruik van dubbelen wel eens een vergissing zijn.

b) Als dubbels juist zijn, wat bedoel ik dan met precisie? Als u het alleen over weergave hebt, verpak de logica dan in een weergavefunctie en u hoeft er maar op één plaats mee om te gaan; d.w.z. pas het DRY-principe toe.

Commentaren (0)