vba浮点型

问题描述:vba货币型变量与浮点数据区别 大家好,小编为大家解答vb浮点数结果不精确的问题。很多人还不知道vba浮点型强制转换,现在让我们一起来看看吧!

VBA提供了哪些标准数据类型?

vba浮点型的相关图片

vba中货币变量定义为currency,浮点类型定义为Double,二者区别如下:

1、数据长度占用内存相等,都是8个字节,但是currency的范围不如double大。

2、currency定义变量的标识符是@,而double类型是#。

如:Dim num# = 3是定义num为double型,而Dim num@=3就是货币型。

VBA中的数据类型总结如下:

Excel 求教用VBA解决浮点误差的相关图片

Excel 求教用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。

用VBA 表达式表示:将一个单精度浮点型变量A 的值留取三位小数的相关图片

用VBA 表达式表示:将一个单精度浮点型变量A 的值留取三位小数

原因:这是由于浮点运算造成的。(在微软官方有详细说明的)

(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()函数将其保留固定的小数位。

方法二:

工具----选项----重新计算---勾选【以显示精度为准】

vba透视表如何选择数值类型的相关图片

vba透视表如何选择数值类型

Sub test()

A=5.88925

A = Round(A, 3)。

End Sub

Excel 在VBA中怎么定义数值变量

vba透视表根据数据类型选择数值类型。根据查询相关公开信息显示:在VBA中,数据也会被分成不同的类型,例如:处理数字的整型Integer型、长整型Long型、单精度浮点型Single型、双精度浮点型Double型,故vba透视表根据数据类型选择数值类型。

原文地址:http://www.qianchusai.com/vba%E6%B5%AE%E7%82%B9%E5%9E%8B.html

陀螺不抽不转谚语,陀螺不倒原理力学分析图

陀螺不抽不转谚语,陀螺不倒原理力学分析图

脑子笨的人有什么特征,脑子笨的人有什么特征 可以改善吗

脑子笨的人有什么特征,脑子笨的人有什么特征 可以改善吗

otc3最强参数,otc3参数怎么用

otc3最强参数,otc3参数怎么用

免费的数据恢复软件哪个好,免费的数据恢复软件哪个好手机

免费的数据恢复软件哪个好,免费的数据恢复软件哪个好手机

accident例句,accident例句简单

accident例句,accident例句简单

比较吸引人的演讲主题,比较吸引人的演讲主题有哪些

比较吸引人的演讲主题,比较吸引人的演讲主题有哪些

crippled-70

crippled-70

conta,contaminant

conta,contaminant

ddr4内存超频安全电压,ddr4内存超频安全电压是多少

ddr4内存超频安全电压,ddr4内存超频安全电压是多少

s-1103-50

s-1103-50