将字符串转换为 bigdecimal 时出错
error converting string to bigdecimal
早上好,
我正在将一个字符串解析为一个大的小数,但是当我将模式 ans simbols 设置为它时,调试器 returns 出错。代码非常简单,我是从文档和 Whosebug 上的另一个 post 那里获取的,我不记得它是什么地址。如下:
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator('.');
symbols.setDecimalSeparator(',');
String pattern = "#.##0,0#";
DecimalFormat decimalFormat = new DecimalFormat(pattern, symbols);
decimalFormat.setParseBigDecimal(true);
(BigDecimal) decimalFormat.parse(entity.getQta()))
在这一行抛出错误:
DecimalFormat decimalFormat = new DecimalFormat(pattern, symbols);
GWT 调试器的 StackTrace:
com.smartgwt.client.core.JsObject$SGWT_WARN:
09:29:12.673:MOU6:WARN:RPCManager:ATTENZIONE: si e' verificato un errore imprevisto [SC: 500]undefined - response: {clientContext: Obj,
status: -1,
invalidateCache: true,
data: "ATTENZIONE: si e' verificato un errore i..."[59],
internalClientContext: Obj,
context: undef,
startRow: 0,
endRow: 0,
totalRows: 0} at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at
java.lang.reflect.Constructor.newInstance(Constructor.java:422) at
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:105) at
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) at
com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338) at
com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219) at
com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136) at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:576) at
com.google.gwt.dev.shell.ModuleSpace.invokeNativeVoid(ModuleSpace.java:304) at
com.google.gwt.dev.shell.JavaScriptHost.invokeNativeVoid(JavaScriptHost.java:107) at com.smartgwt.client.data.DataSource.processResponse(DataSource.java) at
com.sgss.common.client.ds.SgssGwtRpcDataSource.handleFailure(SgssGwtRpcDataSource.java:205) at
com.sgss.common.client.ds.SgssGwtRpcDataSource$GenericAsyncCallback.onFailure(SgssGwtRpcDataSource.java:148) at
com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:237) at
com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:259) at
com.google.gwt.http.client.RequestBuilder.onReadyStateChange(RequestBuilder.java:412) at sun.reflect.GeneratedMethodAccessor417.invoke(Unknown Source) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) at
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) at
com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338) at
com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219) at
com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136) at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:576) at
com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:284) at
com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) at com.google.gwt.core.client.impl.Impl.apply(Impl.java) at
com.google.gwt.core.client.impl.Impl.entry0(Impl.java:356) at
sun.reflect.GeneratedMethodAccessor412.invoke(Unknown Source) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) at
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) at
com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293) at
com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547) at
com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364) at java.lang.Thread.run(Thread.java:745)
编辑:我没有提到 GWT(在我的例子中是 SMartGwt,因为我在后端做这个解析,它不使用 smartgwt 但只使用 spring 和休眠。
您的模式不正确,在行中:
String pattern = "#.##0,0#";
根据文档
https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html(在标题为特殊模式字符的部分)模式中的“,”符号是为分组分隔符保留的——不是数字中的逗号;这 ”。”保留给小数点分隔符,而不是字面上的点字符。
由于您的数字格式为 1.743.711,67(而不是 1,743,711.67),您使用符号变量将“,”指定为小数点分隔符,将“.”指定为小数点分隔符。作为分组分隔符。但是,该模式不遵循相同的逻辑。它交换分组和小数分隔符的位置,因此失败。
我建议你试试:
String pattern = "#,##0.0#";
使用相同的代码,看看是否有帮助。
早上好, 我正在将一个字符串解析为一个大的小数,但是当我将模式 ans simbols 设置为它时,调试器 returns 出错。代码非常简单,我是从文档和 Whosebug 上的另一个 post 那里获取的,我不记得它是什么地址。如下:
DecimalFormatSymbols symbols = new DecimalFormatSymbols();
symbols.setGroupingSeparator('.');
symbols.setDecimalSeparator(',');
String pattern = "#.##0,0#";
DecimalFormat decimalFormat = new DecimalFormat(pattern, symbols);
decimalFormat.setParseBigDecimal(true);
(BigDecimal) decimalFormat.parse(entity.getQta()))
在这一行抛出错误:
DecimalFormat decimalFormat = new DecimalFormat(pattern, symbols);
GWT 调试器的 StackTrace:
com.smartgwt.client.core.JsObject$SGWT_WARN:
09:29:12.673:MOU6:WARN:RPCManager:ATTENZIONE: si e' verificato un errore imprevisto [SC: 500]undefined - response: {clientContext: Obj,
status: -1,
invalidateCache: true,
data: "ATTENZIONE: si e' verificato un errore i..."[59],
internalClientContext: Obj,
context: undef,
startRow: 0,
endRow: 0,
totalRows: 0} at
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at
java.lang.reflect.Constructor.newInstance(Constructor.java:422) at
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:105) at
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) at
com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338) at
com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219) at
com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136) at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:576) at
com.google.gwt.dev.shell.ModuleSpace.invokeNativeVoid(ModuleSpace.java:304) at
com.google.gwt.dev.shell.JavaScriptHost.invokeNativeVoid(JavaScriptHost.java:107) at com.smartgwt.client.data.DataSource.processResponse(DataSource.java) at
com.sgss.common.client.ds.SgssGwtRpcDataSource.handleFailure(SgssGwtRpcDataSource.java:205) at
com.sgss.common.client.ds.SgssGwtRpcDataSource$GenericAsyncCallback.onFailure(SgssGwtRpcDataSource.java:148) at
com.google.gwt.user.client.rpc.impl.RequestCallbackAdapter.onResponseReceived(RequestCallbackAdapter.java:237) at
com.google.gwt.http.client.Request.fireOnResponseReceived(Request.java:259) at
com.google.gwt.http.client.RequestBuilder.onReadyStateChange(RequestBuilder.java:412) at sun.reflect.GeneratedMethodAccessor417.invoke(Unknown Source) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) at
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) at
com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:338) at
com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:219) at
com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136) at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:576) at
com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:284) at
com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) at com.google.gwt.core.client.impl.Impl.apply(Impl.java) at
com.google.gwt.core.client.impl.Impl.entry0(Impl.java:356) at
sun.reflect.GeneratedMethodAccessor412.invoke(Unknown Source) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at
com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) at
com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) at
com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:172) at
com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:293) at
com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:547) at
com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364) at java.lang.Thread.run(Thread.java:745)
编辑:我没有提到 GWT(在我的例子中是 SMartGwt,因为我在后端做这个解析,它不使用 smartgwt 但只使用 spring 和休眠。
您的模式不正确,在行中:
String pattern = "#.##0,0#";
根据文档 https://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html(在标题为特殊模式字符的部分)模式中的“,”符号是为分组分隔符保留的——不是数字中的逗号;这 ”。”保留给小数点分隔符,而不是字面上的点字符。
由于您的数字格式为 1.743.711,67(而不是 1,743,711.67),您使用符号变量将“,”指定为小数点分隔符,将“.”指定为小数点分隔符。作为分组分隔符。但是,该模式不遵循相同的逻辑。它交换分组和小数分隔符的位置,因此失败。
我建议你试试:
String pattern = "#,##0.0#";
使用相同的代码,看看是否有帮助。