FineUI 官方论坛
标题:
【有意思】NumberBox长度超过16位的数字时会自动把末位变
[打印本页]
作者:
apoul
时间:
2013-5-4 20:50
标题:
【有意思】NumberBox长度超过16位的数字时会自动把末位变
[attach]2275[/attach]
[attach]2276[/attach]
如图,第一张图是16位数字,从数据库里读出来显示,第一个是用TextBox显示,正确,第二个是用NumberBox显示,正确。
第二张图是17位数,第一个是用TextBox显示,正确,第二个是用NumberBox显示,错误。
作者:
sanshi
时间:
2013-5-4 22:21
这个问题真有意思,我们来看几个JavaScript例子:
var a = 1111111111111111; // 16个数字
console.log(a); // 结果是1111111111111111
var a = 11111111111111111; // 17个数字
console.log(a); // 结果是11111111111111112
var a = 111111111111111111; // 18个数字
console.log(a); // 结果是111111111111111100
var a = 1111111111111111111; // 19个数字
console.log(a); // 结果是111111111111111200
var a = 11111111111111111111; // 20个数字
console.log(a); // 结果是11111111111111110000
复制代码
再来看几个例子:
var a = "1111111111111111"; // 16个数字
console.log(parseFloat(a)); // 结果是1111111111111111
var a = "11111111111111111"; // 17个数字
console.log(parseFloat(a)); // 结果是11111111111111112
var a = "111111111111111111"; // 18个数字
console.log(parseFloat(a)); // 结果是111111111111111100
复制代码
是不是这个数字太大,JavaScript表示不了了?也不是!
Number.MAX_VALUE // 1.7976931348623157e+308
复制代码
再来看:
var a = "11111e100"; // 1后面有100多个零
console.log(parseFloat(a)); // 结果是1.1111e+104
复制代码
========================
所以应该是JavaScript表示数字的精度不够了,看网上有提到这个问题的:
http://zhidao.baidu.com/question/49623416.html
对于精度是6位或7位的问题,float型(4字节32位)精度确实是6位或7位,而double型(8字节64位)精度是15或16位.
所以,对于如此长的数字,就不要用NumberBox控件了。
作者:
apoul
时间:
2013-5-5 08:13
{:soso_e179:}最后我是用TextBox,然后用Regex属性来验证数字。以前都没现这属性,看来还要继续研究啊。
欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/)
Powered by Discuz! X3.4