langhua9527 2009-06-10 09:55 采纳率: 0%
浏览 647
已采纳

Java处理30位的数据(小数点前有20位,后有10位)

Java处理30位的数据(小数点前20位,小数点后面10位),请问是怎么处理的啊?
我现在读到这样30位的数据,读出来都是字符串。然后计算这些数据,计算的结果,也要求是30位的,然后保存到数据库
问题1:数据库怎么保存这样的数据好呢,数字字段保存,还是用字符串保存。(Oracle)
问题2:当读到这样的一个数据的时候(30位),怎么把这30位的字符串转成数字来运算,运算结果还要保留30位的精度(小数点后十位),并存到数据库。
问题3:如果这30位的数据里面如现了字符,如:1234564abc545.12545545454这样的情况怎么处理好?

自己想的一个问题,大家看一下,有好的方法和思路没有,谢谢了。。如果认为上面没有说清楚的,我再补充
[b]问题补充:[/b]
再补充一个问题
问题4:如果读上来的是科学记数法怎么处理
如下:2.345645754412300023E+15

[b]问题补充:[/b]
[code="java"]BigDecimal n3 = new BigDecimal(3.34564575441235634143223E+9);
System.out.println(n3)[/code]
这样的话n3会失去精度

结果为
3345645754.41235637664794921875
但是我每次运行都是这个结果
[b]问题补充:[/b]
好,我先去研究下,再来问你们,谢谢了
[b]问题补充:[/b]
[code="java"]
System.out.println(new Double(1.2345678901234567890E+9).toString());
//结果是:1.2345678901234567E9
//只能保证17位啊,我想保证30位数,怎么保证啊?谢谢大家了
BigDecimal n3 = new BigDecimal(1.2345678901234567890E+9);
System.out.println(n3);
//这样也只能保证17位数
//输出结果:1234567890.123456716537475585937500000000
//到了17位之后就保留不了精度了
[/code]
[b]问题补充:[/b]
还有就是oracle数据库里面,有什么类型创建的表,让17位的数存进去,不发生改变(保留精度),谢谢大家了

  • 写回答

11条回答 默认 最新

  • weixin_42297497 2009-06-10 10:11
    关注

    支持科学计算记数方式
    BigDecimal n = new BigDecimal("11111111111111111111.84566656");
    BigDecimal n1 = new BigDecimal("2.345645754412300023E+15");
    System.out.println(n.add(n1));

    结果:
    11113456756865523411.86866656

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(10条)

报告相同问题?

悬赏问题

  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试