Meddelande

Minska
No announcement yet.

konvertera string till int

Minska
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • konvertera string till int

    Tjena!

    Jag sitter och meckar med en webshop och skall modifiera ett värde

    Värdet finns i denna variablen header.getNetValue(), men när jag försöker konvertera till int, så blir det syntax error (dessvärre så ser jag inte felet).

    int num=Integer.parseInt(header.getNetValue()); ger alltså syntax error, hur tusan får jag det till integer så att jag kan multiplicera värdet???


    Tack på förhand!


    rollo

  • #2
    Är värdet helt numeriskt? Fångar du exceptions någonstans?
    Kod:
    int num;
    try {
         num = Integer.parseInt(header.getNetValue());
    } catch(NumberFormatException e) {
         /* Inte bara siffror i strängen */
    }
    "Knock off the hippie shit, strap on a helmet and start shooting. This is Malibu, baby! I want you to storm that beach like it's fuckin' Normandy!"

    Kommentera


    • #3
      Värdet är en summa, så det bör vara numeriskt.

      Enda gången jag kan fånga värdet är om jag gör
      String rollo = header.getNetValue();

      försöker jag göra det till int istället så krashar sidan

      rollo

      Kommentera


      • #4
        Om Integer.parseInt "kraschar" torde det antagligen bero på en av två saker:
        1. header.getNetValue() returnerar null, vilket orsakar NullPointerException i parseInt; eller
        2. du skickar in en sträng som inte är ett giltigt tal och får därmed NumberFormatException.

        Går dock inte att säga mer utan att veta vilket exception som kastas.
        Vissa dagar är man asfalten, andra dagar är man ångvälten.
        Vissa dagar är man myggan, andra dagar är man vindrutan.

        XML är som våld; löser det inte ens problem betyder det att man använder för lite.

        Kommentera


        • #5
          ok, jag får försöka jaga rätt på felet på något sätt.

          Jag ser att värdet är 0.00 i vart fall om det kan vara någon hjälp.

          (är det nu ni säger; "för fan, det där skulle du sagt från början!!!")

          rollo

          Kommentera


          • #6
            Japp
            0.00 är inte ett heltal utan ett flyttal och är således inte kosher indata till parseInt... du får använda någon form av flyttal, som double.
            Kod:
            double num;
            try {
                 num = Double.parseDouble(header.getNetValue());
            } catch(NumberFormatException e) {
                 /* Inte bara siffror i strängen */
            }
            Vissa dagar är man asfalten, andra dagar är man ångvälten.
            Vissa dagar är man myggan, andra dagar är man vindrutan.

            XML är som våld; löser det inte ens problem betyder det att man använder för lite.

            Kommentera


            • #7
              solly!


              Jag kör med din kod

              Kod:
              double num;
              try {
              	 num = Double.parseDouble(header.getNetValue());
              } catch(NumberFormatException e) {
              	 /* Inte bara siffror i strängen */
              	out.println("NEJ!");	 
              }
              och försöker skriva ut värdet med <%=num%>, men det dumpar.


              Jag har hittat en log som verkar ge mig ett felet.

              Kod:
              Jan 15, 2008 8:16:16 AM,409 SAPEngine_Application_Thread[impl:3]_39 Error bbcom.sapmarkets.isa.core.ActionServlet [released|system.exception] An exception has occurred: {0}
              com.sap.engine.services.servlets_jsp.server.jsp.exceptions.CompilingException: Error while executing the compilation process: [C:/usr/sap/QD1/JC00/j2ee/cluster/server0/apps/sap.com/crm.b2b/servlet_jsp/b2b/work/jsp_order1200381374441.java:1016: variable num might not have been initialized
              			out.print(num);
                                                ^
              1 error
              ].
              	at com.sap.engine.services.servlets_jsp.server.jsp.JavaCompiler.compileExternal(JavaCompiler.java:142)
              	at com.sap.engine.services.servlets_jsp.server.jsp.JavaCompiler.compile(JavaCompiler.java:238)
              	at com.sap.engine.services.servlets_jsp.server.jsp.JSPParser.generateJavaFile(JSPParser.java:369)
              	at com.sap.engine.services.servlets_jsp.server.jsp.JSPParser.parse(JSPParser.java:107)
              	at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.getClassName(JSPServlet.java:238)
              	at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.compileAndGetClassName(JSPServlet.java:429)
              	at com.sap.engine.services.servlets_jsp.server.servlet.JSPServlet.service(JSPServlet.java:169)
              	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
              	at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.doWork(RequestDispatcherImpl.java:321)
              	at com.sap.engine.services.servlets_jsp.server.runtime.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:377)
              	at org.apache.struts.action.ActionServlet.processActionForward(ActionServlet.java:1758)
              	at com.sapmarkets.isa.core.ActionServlet.processActionForward(ActionServlet.java:267)
              	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1595)
              	at com.sapmarkets.isa.core.ActionServlet.process(ActionServlet.java:430)
              	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:491)
              	at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
              	at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
              	at com.sap.engine.services.servlets_jsp.server.runtime.FilterChainImpl.runServlet(FilterChainImpl.java:117)
              	at com.sap.engine.services.servlets_jsp.server.runtime.FilterChainImpl.doFilter(FilterChainImpl.java:62)
              	at com.sapmarkets.isa.isacore.TealeafFilter.doFilter(TealeafFilter.java:71)
              	at com.sap.engine.services.servlets_jsp.server.runtime.FilterChainImpl.doFilter(FilterChainImpl.java:58)
              	at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.runServlet(HttpHandlerImpl.java:384)
              	at com.sap.engine.services.servlets_jsp.server.HttpHandlerImpl.handleRequest(HttpHandlerImpl.java:266)
              	at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:387)
              	at com.sap.engine.services.httpserver.server.RequestAnalizer.startServlet(RequestAnalizer.java:365)
              	at com.sap.engine.services.httpserver.server.RequestAnalizer.invokeWebContainer(RequestAnalizer.java:944)
              	at com.sap.engine.services.httpserver.server.RequestAnalizer.handle(RequestAnalizer.java:266)
              	at com.sap.engine.services.httpserver.server.Client.handle(Client.java:95)
              	at com.sap.engine.services.httpserver.server.Processor.request(Processor.java:160)
              	at com.sap.engine.core.service630.context.cluster.session.ApplicationSessionMessageListener.process(ApplicationSessionMessageListener.java:33)
              	at com.sap.engine.core.cluster.impl6.session.MessageRunner.run(MessageRunner.java:41)
              	at com.sap.engine.core.thread.impl3.ActionObject.run(ActionObject.java:37)
              	at java.security.AccessController.doPrivileged(Native Method)
              	at com.sap.engine.core.thread.impl3.SingleThread.execute(SingleThread.java:100)
              	at com.sap.engine.core.thread.impl3.SingleThread.run(SingleThread.java:170)

              Jag tolkar det som om variablen num inte är deklarerad korrekt, men fattar inte hur jag skall deklarera den!


              Tack på förhand!


              rollo

              Kommentera


              • #8
                Ah, my bad. Mitt exempel var visst lite minimalt. När man skriver så här:
                Kod:
                double num;
                try {
                     num = Double.parseDouble(header.getNetValue());
                } catch(NumberFormatException e) {
                     /* Inte bara siffror i strängen */
                }
                out.println(num);
                ... så leder inte alla "paths of execution" till att num initieras. Om parseDouble kastar ett exception, så får num aldrig något värde, och har man inte tilldelat en variabel ett värde får man inte använda variabeln. Det finns i princip två sätt att lösa det på:
                Kod:
                // variant 1: ge ett defaultvärde
                double num = 0;
                try {
                     num = Double.parseDouble(header.getNetValue());
                } catch(NumberFormatException e) {
                     /* Inte bara siffror i strängen */
                }
                out.println(num);
                
                // variant 2a: kasta vidare exception
                double num = 0;
                try {
                    num = Double.parseDouble(header.getNetValue());
                } catch(NumberFormatException e) {
                     // kasta vidare ett undantag med bättre felmeddelande och en
                     // referens till det ursprungliga undantaget
                     throw new ServletException("getNetValue returned invalid double value", e);
                }
                out.println(num);
                Variant två är nog att föredra i ditt fall. Om getNetValue() inte returnerar ett giltigt tal borde det vara ett ganska allvarligt fel (kolla dokumentationen dock, att den returnerar String och inte double är underligt men kan ha något skäl), så det kan gott propageras uppåt. Anledningen till att det funkar att göra på detta vis är att när man kommer till out.println-raden efter try/catchen, så kan kompilatorn se att antingen körs try-blocket hela vägen igenom, i vilket fall num har initierats, eller så avbryts det pga exception, varpå catch-blocket kör. Eftersom catch-blocket alltid kastar vidare ett undantag vet man då att man bara kommer till out.println om hela try-blocket körts, och i sådana fall har num initierats, varför den kan användas.
                Vissa dagar är man asfalten, andra dagar är man ångvälten.
                Vissa dagar är man myggan, andra dagar är man vindrutan.

                XML är som våld; löser det inte ens problem betyder det att man använder för lite.

                Kommentera


                • #9
                  Alternativ 1 funkade perfekt!

                  Hade du varit här så hade du fått en stor blöt puss!

                  Kommentera


                  • #10
                    Var också medveten om att alt. 1 är det fulare av de tu. En dag kommer komma då du sitter och kliar dig i huvudet och undrar varför i hela fridens namn alla kolumner har "0" som värde, eftersom du sväljer undantaget. Logga det i alla fall:
                    Kod:
                    double num = 0;
                    try {
                         num = Double.parseDouble(header.getNetValue());
                    } catch(NumberFormatException e) {
                         log("error parsing getNetValue(); using default value " + num, e);
                    }
                    out.println(num);
                    Vissa dagar är man asfalten, andra dagar är man ångvälten.
                    Vissa dagar är man myggan, andra dagar är man vindrutan.

                    XML är som våld; löser det inte ens problem betyder det att man använder för lite.

                    Kommentera

                    Working...
                    X