我的程序运行后只显示最多16个
比如我给一个变量赋值为12345678901234567890123456789012
转换成字符串给编辑框的成员变量,结果运行后只显示1234567890123456
为什么啊?谢谢!

解决方案 »

  1.   

    你是不是取字符 "123456789012345678901234567890"转换成 double 类型的?
      

  2.   

    你是不是用 "12345678901234567890" 字符串转成 double ?
      

  3.   

    1、查看你自己是不是定义了CString类型的变量的最大长度为:16
    有就删掉
    2、你的编辑框不知是否构长度
      

  4.   

    我是用一个double型的变量转换成CString型
    如:
    char ptr[80]
    double dNum=12345678901234567890123456789012;
    CString csNum=_gcvt(dNum,32,ptr);
    结果是1234567890123456
    只显示16位
      

  5.   

    double dNum=12345678901234567890123456789012; 这也能编译通过吗?
    1234567890123456 没有超过Double的范围,12345678901234567就已经超过了范围。
      

  6.   

    楼上说得很对,一个 DOUBLE 类型有多少字节,能存放的最大数据是多少你那样会溢出的,查 M SDN 如下:Data Type Ranges
    C/C++ recognizes the types shown in the table below.Type Name Bytes Other Names Range of Values 
    int * signed, 
    signed int System dependent 
    unsigned int * unsigned System dependent 
    __int8 1 char, 
    signed char –128 to 127 
    double 8 none 1.7E +/- 308 (15 digits) 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^你的 DOUBLE 变量早被撑死了
    参考: MSDN 中    +  Visual C++ documentation
            |
            + Visual C++ programmer's guide
                 |
                 + Language Quick Reference
                   |
                   + Reference Tables
                     |
                     Data Type Ranges
      

  7.   

    Data Type Ranges
    C/C++ recognizes the types shown in the table below.Type Name   |   Bytes    |    Other Names     |   Range of Values 
    int              *          signed,signed int    System dependent 
    unsigned int     *          unsigned             System dependent 
    __int8           1          char,                signed char –128 to 127 
    double           8          none                 1.7E +/- 308 (15 digits) 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      

  8.   

    shit 这下该整齐了吧  :)
      

  9.   

    是呀,编译通过了
    我定义double dLg
    然后赋值给它dLg=3.1415926535897932384626433832795
    那么,就是说double型的只能显示最多十六位了?那用什么类型可以显示32位呢?
      

  10.   

    编辑框的长度没问题
    还有我没有限制CString的最大长度
      

  11.   

    原来如此。double型数值的精度是15digits,要知道80387的实际数据只有80位,所以如果要求32位数字的精度,恐怕只能去找一个现成的算法,或者不怕麻烦的话,自己编一个了。
      

  12.   

    double           8          none                 1.7E +/- 308 (15 digits) 所以你小数点后的数据应能存下,现在是转成字符的问题你可用 
    CString strValue;strValue.Format("%.38f",dValue);试一下不行就改用  sprintf(szValue,"%.38f",dValue);再不行就试 wsprintf(szValue,"%.38f",dValue);
    估计 wsprintf 可能不行,值细查一下 msdn 这几个函数的用法就好了
    祝你好运
      

  13.   

    可是windows自带的计算器为什么能显示那么高的精度呢?
    难道是它自己算的?
      

  14.   

    有一个 long double  但 MSDN 说在 win95 98 NT 下被指向了  double 型的
    数据宽度都是 32 位64 位机也处理不了你那么长的数据估计是人为的编写其它函数,存储时为字符,自已做的计算函数,也就是把那么长的数据存到 BYTE 中,再自己做计算函数。
    我没有别的办法了,帮你  顶!!!!!!!!!!!!!!!!!!!
      

  15.   

    分开定义如何?!把整数部分分别放在4个 unsigned long 中,
    例如(这样比较省事:p):
    struct bigdouble
    {
         整数部分1  unsigned long;
         整数部分2  unsigned long;
         小数部分1  unsigned long;
         小数部分2  unsigned long;
    }
    如果想要扩展他的功能的话可以重载一下'=' and '<' ...操作.或者你在找找math lib看看有没有有关的类型声明。good luck!!!