++++++++++++在线等候 double形变量的问题。(new)

bibleboy 2003-07-16 01:36:52
数据库中定义某字段数值型,18,5
13位整数,5位小数,1位小数点,1位符号位,应该是20位。
java中定义字段为double类型。

现在数据库中做满位数据:-1234567890123.12345
java输出结果:-1234567890123.12 (小数部分不正确)
用格式化
DecimalFormat df = new DecimalFormat("##0.00000");
out.println(df.format(value.doubleValue()));
java输出结果:-1234567890123.12000

如果是不满位的数据:123.12345(整数部分10位也能正常出数据)
java输出结果:123.12345 正常

请问这是为什么?如何让满位数据正常显示?
...全文
41 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun2927 2003-07-18
  • 打赏
  • 举报
回复
up
bibleboy 2003-07-17
  • 打赏
  • 举报
回复
:qiaojiannan(JNQ) 你让我完全明白了,
谢谢!
bibleboy 2003-07-17
  • 打赏
  • 举报
回复
:qiaojiannan(JNQ) 你让我完全明白了,
谢谢!
bibleboy 2003-07-17
  • 打赏
  • 举报
回复
:qiaojiannan(JNQ) 你让我完全明白了,
谢谢!
qiaojiannan 2003-07-16
  • 打赏
  • 举报
回复
水户洋平————这个名字我喜欢。

double的有效数位是15~16位, 简单给你说说意思吧。比如你用8个bit存储浮点位(float是32 bit,double是64 bit) 每个bit只能存0或1,你说你怎么作?

8 bit 一共能存256种可能,所以整型就是-128~127。 换个想法,我们不要精确数字,希望它能表示更大的范围,我们用第一个bit存储正负号,还剩7 bit,再用后3位表示指数次方,中间就只有4 bit表示数了。 4 bit能表示16种可能,加上符号2种、指数8种,我们还是只能表示256种可能!———— 打住! 我们并没有要精确数字,所以我们总可以把某个数转换成 0.xxx*10^x 形式(科学计数法) 假设,我说的是假设,指定0001表示0.1,1001表示0.9,其它的值是期间平均分派值,一共只用了9个数。(真正的浮点数用的是二进制的小数形式)。 指数表示-3~4,8种可能,这样我们能表达的最小正数是0.0001,最大数是9000,最小负数是-9000,最大负数是-0.0001 。于是我们可以表达几乎正负10000以内数了! 但是————只有一位有效数字,表示数的范围大了,但精度降低了(简直是没有精度),这就是计算机表示浮点数的方法了。

我们只用了16种可能中的9种,假使我们用0000表示0.01,用1111表示0.99,其它的在其中平分,我们得到的有效数字介于1位和2位之间,这就是为什么有时候double的精度是15位,而有时候又是16位了。 还有,你会发现double的下限和上限值并不相同,原理和这类似。

bibleboy 2003-07-16
  • 打赏
  • 举报
回复
为什么double类型的有效位数为15位?搞不懂啊!
wolfsquare 2003-07-16
  • 打赏
  • 举报
回复
关注.
需要精确数值地话,sun官方说法是建议使用bigDecimal
bibleboy 2003-07-16
  • 打赏
  • 举报
回复
另外有个附带的奇怪问题:
后台数据库是oracle8i
我用access连接数据库,可以做进满位数据-1234567890123.12345
用toad连接数据库,却最多只能做出-1234567890123.12,竟然和我程序执行效果一样。
为什么?


bibleboy 2003-07-16
  • 打赏
  • 举报
回复
但是刚刚又看了一下
java中对double的定义是-2的31次方-1到2的31次方
我算了一下是-9223372036854775807到9223372036854775807,有19位
有效位数为15位从何说起
弟子愚笨,请有以教我
bibleboy 2003-07-16
  • 打赏
  • 举报
回复
感谢各位,应该就是bobbysun(海豚) 说的原因吧
后台数据库是oracle8i
看来要用BigDecimal取数据。
wyhgg 2003-07-16
  • 打赏
  • 举报
回复
double类型的有效位数为15位
只与后台数据库有关,与jdk无关吧
geyf 2003-07-16
  • 打赏
  • 举报
回复
搂主,你的jdk什么版本?

看看我这JDK1.3的输出:
-1234567890123.12350
agiledolphin 2003-07-16
  • 打赏
  • 举报
回复
double类型的有效位数为15位
bibleboy 2003-07-16
  • 打赏
  • 举报
回复

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧