美好的一天,
在我的 java 操作文件中,我有一个列表:
protected ArrayList< String > deletedCorpRegisteredAccountRefNo = new ArrayList< String >( );
然后我在这个 ArrayList 中放入一些数据,并将其打印出来:
System.out.println( "deletedCorpRegisteredAccountRefNo : "+
deletedCorpRegisteredAccountRefNo );
结果显示正确:
deletedCorpRegisteredAccountRefNo : [0000000000000234324, 0000000000015422629]
然后我转到我的 jsp 和 javaScript 函数,我尝试将此 ArrayList 值分配给 var 调用 refNoList
,并打印出:
var refNoList = ${actionBean.deletedCorpRegisteredAccountRefNo};
console.log(refNoList);
我预计我会看到我的浏览器控制台会打印出类似于我在 Java System.out.println() 中看到的内容,但我得到了另一个结果:
[80084, 15422629]
15422629
仍然可以接受,因为 JavaScript 可能会自动 trim 0
。但不明白为什么0000000000000234324
会变成80084
,这是完全不同的。
我尝试用谷歌搜索根本原因,但没有找到,我想我在谷歌中问了错误的问题。
请多多指教。
最佳答案
如果 JavaScript 数字以零开头,则可以将其解释为八进制值。并且
var x = 0234324;
console.log(x);
这会写出 80084
,因为在十进制中,这与八进制中的 234324
是相同的值。
您需要 trim 字符串中的尾随零,它就会按照您想要的方式工作。
<小时/>其他数字定义
在 JavaScript 中,数字可以解释为二进制、八进制、十进制或十六进制。这里有一个不同文字的小列表:
123 - normal decimal
0123 - octal: decimal value is 83
0x123 - hexadecimal: decimal value is 291
0o123 - octal: decimal value is 123
0b101 - binary: decimal value is 5
第二个示例 (0123
) 的问题在于,仅在可能的情况下才将其解释为八进制。例如。 09123
和 081
将被解释为十进制。这个故事的寓意是,你不应该依赖这种行为,如果你需要八进制,请明确使用 0o
,如果你需要小数,请 trim 那些零。
解决问题
无论如何,要将数字解析为十进制,您只需将基数值作为参数提供给parseInt(number, radix)
即可:
var x = "000000123";
console.log(parseInt(x, 10)); // prints out 123
关于javascript - javascript 和 java 操作文件中的字符串列表值不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32008037/