vba中货币变量定义为currency,浮点类型定义为Double,二者区别如下:
1、数据长度占用内存相等,都是8个字节,但是currency的范围不如double大。
2、currency定义变量的标识符是@,而double类型是#。
如:Dim num# = 3是定义num为double型,而Dim num@=3就是货币型。
VBA中的数据类型总结如下:
VBA提供了15种标准数据类型,具体见下表:
数据类型的转换
1. 各种进制转换函数
VB中涉及到的数据进制之间的转换函数主要有如下几个:。
Hex 函数: 返回代表十六进制数值的 String;。
Oct 函数: 返回代表一数值的八进制值的Variant (String);。
Cint函数: 强制将一个表达式转换成-32,768 至 32,767的整型;。
CLng函数: 强制将一个表达式转换成-2,147,483,648 至 2,147,483,647的长整型;。
Cdec函数: 强制将一个表达式转换成Decimal 数据类型;。
CDbl函数: 强制将一个表达式转换成Double 数据类型;。
例子:
(1) A=hex(5) 返回5;。
(2) B=hex(10) 返回A。
(3) C=hex(23) 返回17。
(4) D=oct(5) 返回5。
(5) E=oct(10) 返回12。
(6) F=oct(23) 返回27。
(7) G=Cint(&H17) 返回23。
(8) H=Cint(&O12) 返回10。
值得一提的是Hex函数和Oct函数返回的都是字符串,如果是想将十六进制或是八进制的字符串变量转换成十进制,可以按如下方法进行:。
C=”17” 17为十六进制数值的String。
C=”&H” & C。
Ic=Cint(C) 返回23。
2. 字符串和数字转换函数
Str()和Val()用于字符串和数字的相互转换;。
Chr()和Asc()用于字符串和AscII码的相互转换;。
Chrw()和Ascw()用于Unicode码和中文的相互转换;。
Format()函数用途十分广泛的一个函数,功能十分强大.。
例子:
(1) MyString = Str(-459.65) ' 返回 "-459.65"。
MyString = Str(459.001) ' 返回 " 459.001"。
(2) MyValue = Val(" 2 45 7") ' 返回 2457。
MyValue = Val("24 and 57") ' 返回 24。
(3) MyChar = Chr(97) ' 返回 a。
MyChar = Chr(37) ' 返回 %。
(4) MyNumber = Asc("Apple") ' 返回 65。
MyNumber = Asc("a") ' 返回 97。
原因:这是由于浮点运算造成的。(在微软官方有详细说明的)
(0.65)10 = (0.101001100110011001100110011001100110011......)2(0.6) 10 = (0.10011001100110011001100110011001100110011......)2。
目前计算机上存储浮点数值是按照IEEE(电气和电子工程师协会)754浮点存储格式标准来存储的。IEEE单精度浮点格式共32位,包含三个构成字段:23位小数f,8位偏置指数e,1位符号s。将这些字段连续存放在一个32位字里,并对其进行编码。其中0:22位包含23位的小数f; 23:30位包含8位指数e;第31位包含符号s。也就是说上面将0.65及0.5转换出的二进制代码,我们只能存储23位,即使数据类型为double,也只能存储52位,这样大家便能看出问题出现的原因了。
截取的二进制代码已无法正确表示0.65及0.5,根据这个二进制代码肯定无法正确得到结果0.05。
在Excel进行计算时在计算机中是转换成二进制进算然后保留数值的,所以会出现误差。
方法一:
将原公式利用round()函数将其保留固定的小数位。
方法二:
工具----选项----重新计算---勾选【以显示精度为准】
Sub test()
A=5.88925
A = Round(A, 3)。
End Sub
vba透视表根据数据类型选择数值类型。根据查询相关公开信息显示:在VBA中,数据也会被分成不同的类型,例如:处理数字的整型Integer型、长整型Long型、单精度浮点型Single型、双精度浮点型Double型,故vba透视表根据数据类型选择数值类型。
原文地址:http://www.qianchusai.com/vba%E6%B5%AE%E7%82%B9%E5%9E%8B.html