要移植Pascal程序,其中所有实数类型几乎都是Real,不管用Single,还是Double和原先Pascal程序出来的结果都有较大误差。请问怎么定义一个实数数据类型,正数包含12位有效数字,负数包含11位有效数字。多出部分四舍五入

解决方案 »

  1.   

    如果对精度要求特别高的话,可以考虑用字符串(类似于超大数运算),另一个思路是把程序先移埴到delphi上,生成dll供vb调用(如果一定要用vb的话)
      

  2.   

    他要的是浮点运算,超大数除法一般是获得商和余数。
    楼主为什么不看看PASCAL对REAL的定义是怎么样的,占几个BYTE,再看和VB里哪种浮点类型最接近,就用哪种吧。移植可不仅仅是变量的事情,你的代码部分才是关键。
      

  3.   

    Currency 数据类型      Currency 变量存储为 64 位(8 个字节)整型的数值形式,然后除以 10,000 给出一个定点数,其小数点左边有 15 位数字,右边有 4 位数字。这种表示法的范围可以从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807。Currency 的类型声明字符为at号 (@)。Currency 数据类型在货币计算与定点计算中很有用,在这种场合精度特别重要。
    ----------------------------------------------------------------------------------
    Single 数据类型      Single(单精度浮点型)变量存储为 IEEE 32 位(4 个字节)浮点数值的形式,它的范围在负数的时候是从 -3.402823E38 到 -1.401298E-45,而在正数的时候是从 1.401298E-45 到 3.402823E38。Single 的类型声明字符为感叹号 (!)。
    -----------------------------------------------------------------------------------
    Double 数据类型      Double(双精度浮点型)变量存储为 IEEE 64 位(8 个字节)浮点数值的形式,它的范围在负数的时候是从 -1.79769313486232E308 到 -4.94065645841247E-324,而正数的时候是从 4.94065645841247E-324 到 1.79769313486232E308。Double 的类型声明字符是数字符号 (#)。
    ------------------------------------------------------
    你比较了一下,看哪种比较符合你的要求,然后用Round函数进行四舍五入********************************
    Round函数      描述返回一个数值,该数值是按照指定的小数位数进行四舍五入运算的结果。语法Round(expression [,numdecimalplaces])Round函数语法有如下几部分:部分 描述 
    expression 必需的。要进行四舍五入运算的数值表达式。 
    numdecimalplaces 可选的。数字值,表示进行四舍五入运算时,小数点右边应保留的位数。如果忽略,则Round函数返回整数。