webForumDet fria alternativet

hur sätta hur många decimaler som ska skrivas ut

Java

18 svar · 892 visningar · startad av gekko

Medlem sedan okt. 200230 inlägg
Frågan#1

Jag loopar fram tal som jag skriver ut med hjälp av
g.drawString(String.valueOf(i*0.1))

när jag ´ska skriva ut 1.4 blir det 1.3999999999999999
jag vill avrunda til en decimal

Medlem sedan maj 20012 237 inlägg
#2

Hittade klassen DecimalFormat som tydligen gör det du vill åstadkomma.

DecimalFormat df = new DecimalFormat("0.0");
double val = 45.3599;

System.out.println(df.format(val) );

Medlem sedan maj 20012 237 inlägg
#3

Du måste importera klassen java.text glömde jag att nämna...

Medlem sedan okt. 200230 inlägg
#4

Tack för hjälpen

Medlem sedan maj 20012 237 inlägg
#5

Börjar först med att säga att jag på inget sätt menar nåt illa med detta inlägg...

Om du inte har gjort det ännu så tycker jag att du skall antingen ladda ned Java API specification ( http://java.sun.com/j2se/1.4.1/docs/api/ ) till din dator eller kika på online-versionen. Där hittar du alla klasserna som följer med Java-installationen, alla klasserna metoder samt förklaringar + en del länkar till sidor med exempel. Där kan du sedan leta efter passande färdiga klasser som du kan använda dig utav. En guldgruva för oss java-programmerare helt enkelt. Ett måste!

Jag brukar själv ibland fråga Er här på wf och sedan märkt att jag rätt så lätt hittat svaret just på API sidan eller på andra sidor på Suns Java-site.

Dock så menar jag inte att man inte får fråga dumma frågor här, tvärtom! Men det är roligare om man hittar lösningen själv. :)
Fortsätt med att fråga, det gör jag iaf! :)

Jag personligen gillar inte RTFM-svar man tycks få ibland på andra ställen.

Medlem sedan sep. 2001961 inlägg
#6

Håller med jme men vill bygga ut lite. I början är Java API-et lite svårt att begripa sig på. Det tar en stund innan man fattar hur det är uppbyggt och vad saker och ting heter.

Genom att ställa lite dumma "rtfm" frågor så får man hjälp att lära sig var man hittar saker. Det är därför jag ofta refererar till något i API'et. Kanske inte alltid direkt till det som söks men från min startpunkt ska man kunna hitta sakerna ganska snabbt.

/Lime

Medlem sedan jan. 2004106 inlägg
#7

jme skrev:

Där kan du sedan leta efter passande färdiga klasser som du kan använda dig utav. En guldgruva för oss java-programmerare helt enkelt. Ett måste!

Jag brukar själv ibland fråga Er här på wf och sedan märkt att jag rätt så lätt hittat svaret just på API sidan eller på andra sidor på Suns Java-site.

Jag förstår vad jme menar men undrar ändå hur jag kan praktisera detta i verkligheten?

Om jag skulle tex börja med gekko´s problem

gekko skrev:

jag vill avrunda til en decimal

hur skulle du och Lime gått till väga (förutom alltså att ställa frågan till wf)?
Sen har jag en fråga till:
koden som jme gav
Tack för ordet
/Peter

DecimalFormat df = new DecimalFormat("0.0");
double val = 45.3599;

System.out.println(df.format(val) );

här har vi
en klass = DecimalFormat
deklarerat en referensvariabel med namnet df
min fråga är:
varför blir operationen´s nam = format() och inte round?

Medlem sedan maj 20012 237 inlägg
#8

Varför skulle det blir round()? :)

metoden format() formaterar värdet till det formar man valde då skapade en ny instans av klassen DecimalFormat();

new DecimalFormat("0.0") <- enger att vi vill att talet ska ha en decimal.

Har vi då värdet 4.65 så borde det bli 4.7 eftersom värdet måste avrundas till en decimal och 5 avrundas uppåt.

Om vi kikar på gekkos problem igen:

Vilka valmöjligheter har vi för att lösa problemet?

Jo:

  1. Vi skapar en egen metod för att avrunda.
    Vi tittar först om inmatningen är okej, dvs att den innehåller enbart siffror, punkt och/eller '-'-tecken. Sedan kontrollerar vi om talet är ett heltal eller ett flyttal, dvs kikar om värdet har en punkt.

Sedan måste vi bestämma hur många decimaler vi vill använda just då. Sedan måste vi veta reglerna för avrundning. När avrundar man nedåt och när avrundar man uppåt osv osv....you get the point... ;)

  1. Vi letar efter ett passande klass samt metod i api-doc:en vilket kan vara svårt om man inte är van med api-doc, eller inte kommer ihåg klassens namn. Man får ibland tänka sig till rätt klass. Om du inte har nån aning om i vlken klass lösningen kan finnas så kan du börja med att kika på paketens namn i api-doc:en. Namnen kan ibland ge ledtrådar.

T ex java.awt handlar nog om GUI

java.net behandlar säkert nätverk

  1. Vi letar efter en passande klass med hjälp av t ex google. Kanske nån annan har haft samma problem och löst det själv.

  2. Fråga hjälp av nån, antingen av sin kompis eller t ex just här på webforum.

Du själv väljer i vilken ordning du vill försöka lösa problemet i.

Jag tycker att api-doc är en bra ställe att börja på för at försöka lösa ett problem. Ju mer du kikar på det, desto bättre vet du hur man navigerar i det. Man lär sig med tiden. I början tyckte jag det var kaotiskt men när jag senare förstod hur klasserna förhållde sig till varandra (bl a arv osv) så blev det lättare.

För att bli en bra programmerare behövs mer än bara bra kunskaper i programmering. Man behöver också kunna leta rätt på väsentlig information, i böcker och på Internet ( google ;).

Med tiden så lär man sig mer, kommer man ihåg mer. Vissa problem löser vi genom att vi kommer ihåg en liknande problem man haft tidigare.

När jag svarade på geckos fråga så tror jag att jag lite innan hade jag sett en liknande lösning i nån bok jag har. Jag tror mig minnas att jag inte kunde svara på frågan rakt av, inte ens genom att kika i api-doc:en.

Lime:

Det du säger om att man frågar "dumma" frågår och får sedan hänvisningar till en viss sida är bra, men man ska inte ge ut hänvisningen i klassiskt rtfm-stil. :)

Jag tror också det är ett bra sätt. Man frågar och sen får man inte svaret rakt av men hjälp på vägen. Tror man lär sig bättre på så sätt.

Medlem sedan jan. 2004106 inlägg
#9

Tack för svaret och

jme skrev:

metoden format() formaterar värdet till det formar man valde då skapade en ny instans av klassen DecimalFormat();

Nu har jag försökt söka på format() både på sun oxh google, men inte förstod det

Medlem sedan maj 20012 237 inlägg
Medlem sedan jan. 2004106 inlägg
#11

varit där, men måste til lmin skam säga at jag inte har blivit klokare...

Medlem sedan sep. 2001961 inlägg
#12

Då börjar det genast bli liiiite knepigare...

Just formatering av text hör till det snårigaste man kan hitta på, oavsett språk. Allt beror på vilket lokalt format man är ute efter...

Lite kul också att en ett år gammal tråd väcks till liv.

Medlem sedan jan. 2004106 inlägg
#13

Lime skrev:

Just formatering av text hör till det snårigaste man kan hitta på, oavsett språk. Allt beror på vilket lokalt format man är ute efter...

är det formatering av text även n är det gäller siffror??
Har du förslag på länkar som förklarar det hela lite enklare??

Lime skrev:

Lite kul också att en ett år gammal tråd väcks till liv

Den som söker (på wf) hittar också...

Medlem sedan sep. 2001961 inlägg
#14

Jo, det handlar om formatering av text. "Text består av bokstäver, siffror och symboler som används för att förmedla information via ett skrivet media."

Även om jag bara använder siffror, latinska, romerska eller kinesiska, så handlar det fortfarande om formatering av text.

Enklare förklarat... Nä, faktiskt inte. Jag tycker att den tutorial som det har länkats till är ganska rättfram. Vad är det som inte förstås?

Vad du skulle kunna sätta dig in i är reguljära uttryck (regular expresions). Formatering av siffror och texter handlar mycket om att ställa upp ett requljärt uttryck. Och så går det att använda till så mycket annat.

/Lime

Medlem sedan jan. 2004106 inlägg
#15

Lime skrev:

Vad är det som inte förstås

ffa är det två saker:

  1. När jag började med java, fick jag rådet PeW att lära mig varför saker blir som de blir, istället för bara funktioner, Trots att jag läste sidan massor med gånger, fattar jag ej varför det blir så..
  2. Det här med lokala variationer - hru skulle jme`s förslag se ut om jag ville anpassa till svenska förhållanden (dvs decimal komma)

/Peter

Medlem sedan sep. 2001961 inlägg
#16

En snabb titt i API:et visar att man kan göra NumberFormat.getInstance(Locale inLocale) exempelvis NumberFormat.getInstance(new Locale("sv")); för svenska.

I DecimalFormat-fallet måste man använda sig av DecimalFormatSymbols som kan ta en Locale.

Såhär...
DecimalFormat(String pattern, DecimalFormatSymbols symbols)

Jag skulle alltså deklarera den som
DecimalFormat("101231.12312", new DecimalFormatSymbols(new Locale("sv")));

Medlem sedan jan. 2004106 inlägg
#17

försök till avrundning misslyckades

Jag försökte använda format()

/**
 * @author Peter Lelkes
 * övningsuppgift 1:3 från boken
 */
import javax.swing.*;
public class Bensin {

	public static void main(String[] args) {
		double bensinUse;
		double drivenMiles;
		double bensinComsumtion;
		String indata;
		
		indata = JOptionPane.showInputDialog(null, 
		"Hur många miles har du kört?", "Körd sträcka", 
		JOptionPane.QUESTION_MESSAGE);
drivenMiles = Double.parseDouble(indata);
		indata = JOptionPane.showInputDialog(null, "hur många galoner har gått åt?",
				"gallon", JOptionPane.QUESTION_MESSAGE);
bensinUse = Double.parseDouble(indata);
DecimalFormat df = new DecimalFormat("0.0");
		bensinComsumtion = (bensinUse * 3.785)/(drivenMiles * 0.1609);
JOptionPane.showMessageDialog(null, "Bensinförbrukningen är: \n" + "          "  
	+ df.format(bensinComsumtion) + "  liter/mil",  "liter/mil",
				JOptionPane.INFORMATION_MESSAGE);
System.exit(0);
	}
}

Men får felmess från eclipse:

Decimalformat can not be resolved or is not a type???

Medlem sedan aug. 20021 752 inlägg
#18

Du måste lägga till

import java.text.DecimalFormat;

högst up i koden.

/Viktor

Medlem sedan jan. 2004106 inlägg
#19

Tack för hjälpen Viktor!

268 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)