UNIX C的问题
在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,该如何解决?
[解决办法]
内置类型精度问题,恐怕很麻烦 ...
[解决办法]
如果可以,
是否可以考虑在数据库中存放 string ...
[解决办法]
我这里得出的lAmount = 9999999999999998.000000
环境:VC++6.0
[解决办法]
反正是特定值,构造 SQL 时候直接串接文本,不要转 double
[解决办法]
还不是一样有问题,数据一样不正确 ...
或者把数据分段存储吧
[解决办法]
存字符串比较保险
[解决办法]
总之需要完全准确的高精度运算别用float和double。
[解决办法]
不懂,
[解决办法]
严重关注
[解决办法]
好像double的精度没有16位的。
[解决办法]
我说的16位,指的是有效数字
[解决办法]
insert 的时候 使用 和oracle to_number函数类似的函数