UNIX C的问题

nkwesley 2007-06-13 04:32:42
在UNIX C通过存储过程操作数据库(sybase)

表A有一个字段B,类型是numeric(20,4),整数部分最多可以有16个9

在C程序里有一个字符串“9999999999999999.0000” (16个9)

double lAmount = 0.0;
lAmount= strtod ("9999999999999999.0000", (char **) NULL);

在把lAmount传递给存储过程,插入到表A的字段B内。

但是在调试中我们发现,strtod 后lAmount=10000000000000000.0,整数部分有17位,一旦向表A插时,就溢出了

现在的问题是double不能表示9999999999999999.0000,该如何解决?
...全文
268 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Squall1009 2007-06-13
  • 打赏
  • 举报
回复
insert 的时候 使用 和oracle to_number函数类似的函数
FigoZhu 2007-06-13
  • 打赏
  • 举报
回复
我说的16位,指的是有效数字
FigoZhu 2007-06-13
  • 打赏
  • 举报
回复
好像double的精度没有16位的。
superyys 2007-06-13
  • 打赏
  • 举报
回复
严重关注
superyys 2007-06-13
  • 打赏
  • 举报
回复
不懂,
晨星 2007-06-13
  • 打赏
  • 举报
回复
总之需要完全准确的高精度运算别用float和double。
  • 打赏
  • 举报
回复
存字符串比较保险
jixingzhong 2007-06-13
  • 打赏
  • 举报
回复
还不是一样有问题,数据一样不正确 ...

或者把数据分段存储吧
Wolf0403 2007-06-13
  • 打赏
  • 举报
回复
反正是特定值,构造 SQL 时候直接串接文本,不要转 double
bargio_susie 2007-06-13
  • 打赏
  • 举报
回复
我这里得出的lAmount = 9999999999999998.000000

环境:VC++6.0
jixingzhong 2007-06-13
  • 打赏
  • 举报
回复
如果可以,
是否可以考虑在数据库中存放 string ...
jixingzhong 2007-06-13
  • 打赏
  • 举报
回复
内置类型精度问题,恐怕很麻烦 ...

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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