【问题标题】:How to solve NumberFormatException in Java?如何解决 Java 中的 NumberFormatException?
【发布时间】:2016-02-19 10:18:52
【问题描述】:

表格字段

Field: Bank_Account_No
Type : int(100)

这是我的带有 setter/getter 方法的“帐户”模型

@Entity
@Table(name = "account")
public class Account {

@Column(name = "Pharmacy_Account_No")
private Integer pharmacyAccountNo;

public Integer getPharmacyAccountNo() {
    return pharmacyAccountNo;
}

public void setPharmacyAccountNo(Integer pharmacyAccountNo) {
    this.pharmacyAccountNo = pharmacyAccountNo;
   }
}

如果我插入“1234567891”,它将成功添加。但是当我插入“123456789111111”时,它会抛出 NumberFormatException

Inserting Code:
pharmacyAccount.setPharmacyAccountNo(request.getParameter("pharmacyAccountNo"). != null
                        && !request.getParameter("pharmacyAccountNo").equals("")
                                ? Integer.valueOf(request.getParameter("pharmacyAccountNo") : 0);

这里是 StackTrach:

java.lang.NumberFormatException: For input string: "123456789111111"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at com.pharmacy.ServiceImpl.PharmacyServiceImpl.savePharmacyAccount(PharmacyServiceImpl.java:977)
at com.pharmacy.ServiceImpl.PharmacyServiceImpl.savePharmacy(PharmacyServiceImpl.java:838)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:108)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at com.sun.proxy.$Proxy29.savePharmacy(Unknown Source)
at com.pharmacy.Controller.PharmacyController.savePharmacy(PharmacyController.java:232)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doInvokeMethod(HandlerMethodInvoker.java:710)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:167)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:414)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:402)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:771)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:563)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:343)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:99)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter.doFilter(DefaultLoginPageGeneratingFilter.java:90)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)

【问题讨论】:

  • “123456789111111”大于java整数的最大值(max = 2147483647 and min = -2147483648)
  • 好吧,您超出了Integer 的最大值。如果您希望自己的价值观那么大,请使用Long

标签: java mysql hibernate spring-mvc


【解决方案1】:

如果您查看堆栈跟踪,您会看到 java.lang.Integer.parseInt

您提供的数字太大,超出整数范围。您应该尝试使用Long

如果您从 oracle 网站查看文档:

int:默认情况下,int 数据类型是 32 位有符号二进制补码 整数,最小值为 -231,最大值为 231-1。在 Java SE 8 及更高版本中,您可以使用 int 数据类型 表示一个无符号的 32 位整数,其最小值为 0 最大值为 232-1。使用 Integer 类使用 int 数据 类型为无符号整数。请参阅数字类部分 更多信息。 compareUnsigned、divideUnsigned 等静态方法 等已添加到 Integer 类以支持算术 无符号整数的运算。

来源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

【讨论】:

  • 表示 int(100) 没有问题?你建议Long的问题是什么。感谢您的时间。 @maythesource.com
  • @Ashish Shah 根据使用的位数,每种数据类型都有不同的范围。您输入的数字需要更多位来存储。检查 oracle 站点上的文档 Long 是适合您的号码的类型。带符号的 long 最小值为 -2^63,最大值为 2^63-1 *(-9,22337E+18 to 9,22337E+18)
  • 还请看以下内容,这是了解 Java 和 C/C++ 之间区别的好信息。 Java 类型是标准的,因为一切都在 JVM 上运行。对于 C/C++,类型会根据机器的体系结构而变化 (stackoverflow.com/questions/15004944/max-value-of-integer?lq=1)。
  • 问题已解决以更改为 Long。而且我还更改了我的数据表字段的 BIGINT。谢谢@maythesource.com
  • 改成Long应该就够了。 BigInteger 适用于更大的数字,但您不需要它。 :-)\
【解决方案2】:

Integer 号码超出范围。将您的类型更改为Long

整数值应介于两者之间

一个保持 int 可以拥有的最大值的常量,2 ^31-1。 即2147483647

一个保持 int 可以具有的最小值的常量,-2^31.即2147483648

始终建议对 Id 使用 Long,因为它需要 64 位,即

2^ 63-1 - -2^63

【讨论】:

    【解决方案3】:

    数字超出范围。 "123456789111111" 是一个长数字。

    范围是多少:

                  width                     minimum                         maximum
    signed    8 bit                        -128                            +127
    signed   16 bit                     -32 768                         +32 767
    signed   32 bit              -2 147 483 648                  +2 147 483 647
    signed   64 bit  -9 223 372 036 854 775 808      +9 223 372 036 854 775 807
    unsigned  8 bit                           0                            +255
    unsigned 16 bit                           0                         +65 535
    unsigned 32 bit                           0                  +4 294 967 295
    unsigned 64 bit                           0     +18 446 744 073 709 551 615
    

    Reference。查看Integer 的说明

    【讨论】:

      【解决方案4】:

      数字 123,456,789,111,111 高于 Integer.MAX_INT,即 2,147,483,647 (2^31-1),您希望使用 Long 而不是 Integer,因为 Long 可以达到 2^63-1 (9,223,372,036,854,775,807),如果您期望 numbes 这么大。

      【讨论】:

      • 大家好..感谢 allz..done 更改为 Long 类型。而且我在 BIGINT 中更改了我的数据字段类型。非常感谢。
      【解决方案5】:

      对 IDENTITY 字段使用 Long 而不是 Integer十进制用于货币操作

      【讨论】:

        【解决方案6】:

        如上所述,最好使用 Long 而不是 Integer 对象,因为这将允许您的应用程序处理大尺寸的数字。

        带符号的long的最小值为-2^63,最大值为(2^63) - 1。

        Int 数据类型是一个 32 位有符号二进制补码整数。最小值为 - 2,147,483,648。(-2^31) 最大值为 2,147,483,647(含)。(2^31 -1)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-02-12
          • 2020-04-30
          • 2018-10-19
          • 2018-03-14
          • 1970-01-01
          相关资源
          最近更新 更多