1.页面用户输入银行卡位数比较长,所以服务端用long类型装载。
当存入到oracle数据库中时,查看数据变成了科学记数法标记。(网上说没有指定oracle的number字段长度会就会科学计数超过8位还是9位)。然后问题来了.......
当取出库中字段去前端展示时候,发现最后四位都变成了0,有的是最后追加了10000。
例子:
原始值 123457689098221781
存到库中是科学记数法
再次取值 就成了 123457689098220000 或者 1234576890982210000
(奇怪的是导出excel时候,文件中的卡号都是正确的.....)
才疏学浅....请帮忙看看
每一个存放数据的地方,不管是数据库中表列,还是应用程序中界面UI,它在展示数据的时候都有长度属性的。就像你这个 long型的数字,有十几位长,在丢失精度的情况下,oracle肯定会用科学计数法的形式 保存。就像在 excel中新建标签页中 你输入18位身份证号,回车默认显示成6.xxxxxxxxxxx*10E2这种形式了。但是字符型的话就不会出现这种情况。就像1楼说的。原始存储类型定义成字符型的,需要在其他地方做数值运算是可以强制转换成数值型
银行卡号用VARCHAR类型存储,不要用数值类型。
你看一下你的oracle表这一列的数据类型是什么?如果是数字类型的,应该是类似于decimal() 或者 numeric()之类的,如果是这两个类型,会有精度和小数位刻度设置,确保该精度设置能够存储你的数据。
银行卡号用数值型是不合适的,建议你用VARCHAR。
问题找到了但是暂时不知道解决方法,用long和String或者BigDecimal接受都是正确的卡号,只不过用注解@responsebody 返回给前端时候超出16为的数据都会变为0.
建议去看下关于浮点数据的精度问题,并不是所有的浮点数都可以还原,记得之前看python时候看到过,浮点数有最大精度,也就是小数点后的最大长度,当数据超过这个长度之后就忽略掉了