13 svar
129 visningar
saga är nöjd med hjälpen!
saga 6
Postad: 19 sep 2020

Vilken string java metod gör detta?

Jag ska få strängen: 

-20/1 ---->omvandla till sträng genom heltalsdivision --->"-200"-----> lägg en decimal -->  -20.0

en decimal för att funktionen tar en parameter n som bestämmer hur många decimaler ovanför är n=1

en annan sträng kan vara 

1/1000--->omvandla till sträng genom heltalsdivision --->"10"-----> 0.0001

eftersom n=4; 

vilken string metod kan göra detta? 

Peter 375
Postad: 19 sep 2020

Det är nog ingen som förstår vad du menar. Kan du omformulera dig?

saga 6
Postad: 19 sep 2020

Jag har en sträng:

String string=”0.-20” 

med hjälp av någon string metod ska jag skriva om denna sträng till:

-20.0 
likaså om jag har strängen:

String m= ”0. 1”

ska skrivas om till:

0.0001

Jag tror man använder string.format men har svårt att förstå hur? 

Lindehaven 517 – Leg. Lärare
Postad: 21 sep 2020 Redigerad: 21 sep 2020

Med metoden split() kan strängen delas i de två delarna, d v s delen före "/" och delen efter "/".

Första delen kan sedan omvandlas från sträng till flyttal med metoden parseFloat().

Längden av andra delen ges av metoden length().

Sedan gör man flyttalsdivision mellan första delen och 10 upphöjt i längden av andra delen.

saga 6
Postad: 21 sep 2020

Problemet är att man får inte använda float eller double i denna uppgift. 

Utan man får bara använda int och String. 

Hur gör jag det utan att behöva omvandla till float eller double? 

När jag nu tittar närmare på dina beskrivningar av uppgiften så ser jag att de inte överensstämmer och att ingen av dem tydliggör vilka resultat som ska ges.

Om man har en sträng redan, varför ska man då "omvandla till sträng"?

Hur kan omvandling av "-20/1" bli "-200"? Om man har strängen "0.-20" (konstigt format!),  hur kommer det sig att den ska bli "-20.0"?

Hur kan omvandling av "1/1000" bli "10"? Om man har strängen "0.1", hur kommer det sig att den ska bli "0.0001"?

Det tal som står efter "/", är det ett värde som man ska dividera med eller anger antalet siffror (n) i det talet endast antal decimaler? Med andra ord, om det står "1/5" betyder det att svaret ska bli "0.2" eller "0.1"?

Det går att omvandla strängar till heltal också om det behövs.

saga 6
Postad: 21 sep 2020

Det här är frågan som ställdes i uppgiften:

"En metod toDotString som tar en parameter decimalCount av typen int som input och returnerar en sträng med värdet avrundad neråt avrundad mot noll representerat som ett vanligt decimal tal med så många decimaler som är angett i decimalCount. Exempel: 2/3 för decimalCount angett som 3 bör returnera 0.666. Tips: använd heltals aritmetik för att beräkna talet som ska visas utan punkten; omvandla till sträng och pussla ihop retur strängen med hjälp av sträng funktioner från Javas API. Se till att negativa tal och små tal som 1/100 ger rätt returvärde"

och då har min lärare sagt: "multiplicera med 10 så mångga gånger att decimal delen kommer fram, sen kö du heltals division. tex om du skriver 2/3 med 2 decimaler kan man multiplicera med 10 två gånger, då får man 200/3, om man kör detta med heltals division får man 66. omvandla 66 till en sträng och lägg till "0.". 

men de funkar inte för större tal eller då tal med - i början. 

Laguna Online 10971
Postad: 21 sep 2020

Det står "metod" men vilken klass är det som ska ha den här metoden? 

saga skrev:

"En metod toDotString som tar en parameter decimalCount av typen int som input och returnerar en sträng med värdet avrundad neråt avrundad mot noll representerat som ett vanligt decimal tal med så många decimaler som är angett i decimalCount. Exempel: 2/3 för decimalCount angett som 3 bör returnera 0.666. ..."

Så, uppgiften är något helt annat än vad du beskrev.

Eftersom ordet "metod" används så undrar jag, som Laguna, hur klassen ser ut? 

Utan värden på täljare och nämnare så räcker inte enbart parametern decimalCount för att lösa uppgiften. De ligger antagligen som privata attribut i klassen?

Låt säga att det finns en klass med privata attribut för täljare och nämnare.

Att "multiplicera med 10 så många gånger att decimaldelen kommer fram" kan göras med Math.pow() men den opererar med två parametrar av klassen double och returnerar en double så den är diskvalificerad. Men, det är enkelt att skriva en egen pow()-funktion som tar parametrar av klassen int och returnerar en long. Använd förslagsvis klassen long så kan större värden hanteras.

Sedan kan heltalsdivisionen göras: kvot = täljare * pow(10, decimalCount) / nämnare

Ta hänsyn till följande när du sedan gör om kvoten till en sträng:

  1. Om kvoten är negativ, då ska strängen inledas med "-". Ingen överraskning där.
  2. Om absolutvärdet av kvoten är lägre än 1, då ska strängens fortsättning vara "0." och fyllas på med lämpligt antal nollor innan absolutvärdet av kvoten läggs sist i strängen. "Lämpligt antal nollor" beror av hur många siffror som kvoten får och hur många decimaler man vill ha.
  3. Om absolutvärdet av kvoten är 1 eller högre, då ska strängens fortsättning vara absolutvärdet av kvoten med decimalpunkt på lämpligt ställe och lämpligt antal nollor på slutet. "Lämpligt ställe" och "lämpligt antal nollor" beror av hur många siffror som kvoten får och hur många decimaler man vill ha.

Utmaningen ligger i att koda punkt 2 och 3.

Jag provade koda en lösning och använde mig då av metoderna abs(), valueOf(), length() och substring() samt strängoperatorn +. Är inte någon erfaren Java-programmerare så jag har kanske komplicerat till det i onödan.

saga 6
Postad: 22 sep 2020

Tusen tack löste det!

Lindehaven 517 – Leg. Lärare
Postad: 22 sep 2020 Redigerad: 22 sep 2020

Vad bra! Visa gärna vilka värden du använde för att testa din lösning.

saga 6
Postad: 22 sep 2020

1/2, 2/3, -20/1, -11/10000, 7000/67, 89/99 

använde jag, bland annat för att testa lösningen! 

Det är bra att du testar med olika värden och olika antal decimaler. Prova gärna att omvandla dessa kvoter med 0, 10 och 15 decimaler för att se om ditt program fortfarande fungerar.

Svara Avbryt
Close