webForumDet fria alternativet

Java - Stränghantering

24 svar · 2 784 visningar · startad av Danny

DannyMedlem sedan juli 200412 913 inlägg
#1

Hej, jag hoppas få lite hjälp med en sak jag grubblade på ett tag. Det är så att jag har en variabel som är en sträng och jag vill plocka ut talet från den och multiplicera det med en konstant och sedan kunna skriva ut det också.

Såhär ser min kodrad ut nu:

<b>Brännvidd:</b> $focalLength <b style="color: Silver;"></b>

Det är variabeln "focalLength" som jag vill ta och multiplicera med 4.864 för att sedan ta och skriva det istället, gärna med max två decimaler också. Hur bär man sig åt? Jag kan inte Java och har försökt lite med olika kommandon, men det är inget som vill som jag vill.

/red: just det... variabeln brukar se ut såhär ungefär "7.8125mm", kolla här för exempel: Exempel det är brännvidden där nere. Det ska stå "38 mm" istället!

tydalMedlem sedan juni 20034 013 inlägg
#2

Vad är det för språk du har variabeln i?

Dollartecken före har man ju i php men inte i Javaskript, som är det forum du postat i. Sen pratar du ju också om Java som är ytterligare ett språk...

DannyMedlem sedan juli 200412 913 inlägg
#3

Det är Java. Citat från JAlbum där jag fått mitt fotoalbum ifrån:

beanshell scripts (interpreted Java)

tydalMedlem sedan juni 20034 013 inlägg
#4

Hur gör du för att skriva ut variabeln i html-dokumentet?

DannyMedlem sedan juli 200412 913 inlägg
#5

Det gör programmet automatiskt via två stycken htt-filer där koden står: Här är urdrag från den htt-fil som jag ändrar i:

<ja:if exists="meta">
<small>
   <b>Datum:</b> $originalDate <b style="color: Silver;">&nbsp;&nbsp;|&nbsp;&nbsp;</b>
   <b>Upplösning:</b> $resolution <b style="color: Silver;">&nbsp;&nbsp;|&nbsp;&nbsp;</b>
   <b>Exponering:</b> $exposureTime <b style="color: Silver;">&nbsp;&nbsp;|&nbsp;&nbsp;</b>
   <b>Bländare:</b> $aperture <b style="color: Silver;">&nbsp;&nbsp;|&nbsp;&nbsp;</b>
   <b>Brännvidd:</b> $focalLength <b style="color: Silver;"></b>
</small>
<br><br>
</ja:if>

Observera att jag ändrade mitt förra inlägg också... :)

DannyMedlem sedan juli 200412 913 inlägg
#6

Här är hela filen om det skulle hjälpa

tydalMedlem sedan juni 20034 013 inlägg
#7

Aha, det är inte du som gjort programmet... Då är det ju en annan femma. Det som du klistrat in här är ingen programkod utan bara data till programmet JAlbum som är det som är skrivet i Java.

tydalMedlem sedan juni 20034 013 inlägg
#8

Danny skrev:

Här är hela filen om det skulle hjälpa

Prova att byta ut $focalLength mot:

<%=focalLength * 4.864 %>

DannyMedlem sedan juli 200412 913 inlägg
#9

Det där fungerar inte eftersom focalLength är en sträng där det står mm i slutet. Som i exemplet "7.8125mm". Det står:

Evaluation error on line 1:

Details:
Sourced file: inline evaluation of: ``focalLength * 4.864 ;'' : Operator: '"*"' inappropriate for objects

DannyMedlem sedan juli 200412 913 inlägg
#10

Annars fungerar ju metoden i sig. Skriver jag t ex

<%=10 * 4.864 %>

så skriver den ut 48.64 i koden

DannyMedlem sedan juli 200412 913 inlägg
#11

I Delphi hade jag gjort så att den kopierar strängen från första tecknet till sista siffran, där förekomsten av "mm" finns. Sedan konvertera det till flyttal, avrunda med två decimaler och konvertera tillbaka till sträng. Har provat liknande i Java här, men det bara jävlas.

tydalMedlem sedan juni 20034 013 inlägg
#12

Hur kommer det sig att det står "mm" i focalLength? Det borde det ju egentligen inte göra, utan det borde skrivas ut i html-koden. Typ <b> $focalLength mm </b>.

Kan parseFloat funka kanske?

<%= parseFloat(focalLength) * 4.864 %>

DannyMedlem sedan juli 200412 913 inlägg
#13

Det står:

Evaluation error on line 1:
Details:
Sourced file: inline evaluation of: `` parseFloat(focalLength) * 4.864 ;'' : Command not found: parseFloat( java.lang.String )

DannyMedlem sedan juli 200412 913 inlägg
#14

aha... något som funkar:

Float.parseFloat(focalLength.substring(0,4));

/red:

iaf när focalLength är mer än 4 tecken :) ...märkte jag nu... men då har jag ju lösninge på g kanske. Jag har upptäckt att man kan köra via Java-konsol så kan man prova mkt enklare.

DannyMedlem sedan juli 200412 913 inlägg
#15

Haha!! Got it!!!

focalLength="7.8125mm";
focalLength35=Float.parseFloat(focalLength.substring(0,focalLength.indexOf("mm")));
focalLength35=focalLength35*4.864;

/red: skrev det där i konsollen så det ser ju lite annorlunda ut, ska fixa så den inte kör via en ny variabel bara...

sgtpepperMedlem sedan apr. 20007 588 inlägg
#16

Tänk på att om focalLength skulle sakna "mm" i slutet så kommer du få ett StringIndexOutOfBoundsException då indexOf-metoden returnerar -1, så det kan du kanske behöva kolla först.

För att avrunda till två decimaler så kan du använda NumberFormat:

<%
  NumberFormat nf = NumberFormat.getNumberInstance();
  nf.setMaximumFractionDigits(2);
%>
<%= nf.format(focalLength35) %> mm
DannyMedlem sedan juli 200412 913 inlägg
#17

Såhär blev det:

<ja:if test="<%=focalLength.length() > 0%>">
<b>Brännvidd:</b> $focalLength <b style="color: Silver;"></b>
<b>Brännvidd35:</b>
<%= Float.parseFloat(focalLength.substring(0,focalLength.indexOf("mm"))) * 4.864 %>
<b style="color: Silver;"></b>
</ja:if>

Men det blir för många decimaler ibland, har inte lyckats få till avrundningen än...

DannyMedlem sedan juli 200412 913 inlägg
#18

sgtpepper skrev:

Tänk på att om focalLength skulle sakna "mm" i slutet så kommer du få ett StringIndexOutOfBoundsException då indexOf-metoden returnerar -1, så det kan du kanske behöva kolla först.

För att avrunda till två decimaler så kan du använda NumberFormat:

<%
  NumberFormat nf = NumberFormat.getNumberInstance();
  nf.setMaximumFractionDigits(2);
%>
<%= nf.format(focalLength35) %> mm

aha!! ...ja, jag märkte det, därför satte jag IF-satsen där, men det där sättet med "fractiondigits" verkar vara nåt...

DannyMedlem sedan juli 200412 913 inlägg
#19

Helt lysande sgtPepper!!!!

<ja:if test="<%=focalLength.length() > 0%>">
<b>Brännvidd:</b>
<%
focalLengthA95  = Float.parseFloat(focalLength.substring(0,focalLength.indexOf("mm")));
focalLength35   = focalLengthA95 * 4.864;
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
%>
<%= nf.format(focalLengthA95) %> mm
<b style="color: Silver;"></b>
<b>Brännvidd35:</b>
<%= nf.format(focalLength35) %> mm
<b style="color: Silver;"></b>
</ja:if>
DannyMedlem sedan juli 200412 913 inlägg
#20

Oj! Nu accepterade jag ju kanske fel svar. Det var ju tydal som kom med sparken i rätt riktning så jag lyckades ordna det som var viktigast. Men tack till er båda!!! Det var fint, då kan jag pula vidare...

138 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
135 ms — hämta tråd, inlägg och bilagor (db)