精华内容
下载资源
问答
  • vb作业,单精度与双精度区别

    千次阅读 2012-05-22 16:50:00
    13.25用二进制表示的结果及singledouble 1101.01 因为1101.01=2^3+2^2+0*2^1+2^0+0*2^-1+2^-2 =8+4+0+1+0+1/4=13.25 integer:只能表示整数,不能有小数点,正负数都可以,最大32767 Long:也只能表示整数,...
    13.25用二进制表示的结果及single和double 
    
    1101.01
    因为1101.01=2^3+2^2+0*2^1+2^0+0*2^-1+2^-2
    =8+4+0+1+0+1/4=13.25
    integer:只能表示整数,不能有小数点,正负数都可以,最大32767
    Long:也只能表示整数,正负都可以,最大2147483648
    single:单精度,可以有小数点,最大长度是8位
    double:双精度,可以有小数点,最大长度是16位
    currency:专门用来表示货币的
    单精度和双精度数值类型最早出现在C语言中(比较通用的语言里面),在C语言中单精度类型称为浮点类型(Float),顾名思义是通过浮动小数点来实现数据的存储。这两个数据类型最早是为了科学计算而产生的,他能够给科学计算提供足够高的精度来存储对于精度要求比较高的数值。但是与此同时,他也完全符合科学计算中对于数值的观念:

    当我们比较两个棍子的长度的时候,一种方法是并排放着比较一下,一种方法是分别量出长度。但是事实上世界上并不存在两根完全一样长的棍子,我们测量的长度精度受到人类目测能力和测量工具精度的限制。从这个意义上来说,判断两根棍子是否一样长丝毫没有意义,因为结果一定是False,但是我们可以比较他们两个哪个更长或者更短。这个例子很好地概括了单精度/双精度数值类型的设计初衷和存在意义。

    基于上述认识,单精度/双精度数值类型从一开始设计的时候,就不是一个准确的数值类型,他只保证在他这个数值类型的精度之内是准确的,精度之外则不保证,比方说,一个数值5.1,很可能存储在单精度/双精度数值中的实际值是5.100000000001或者5.09999999999999。导致这个现象的原因我们可以通过两种方式来解释:

    简单的解释方法:

    你可以尝试在任何一个控件的属性面板中,设定他的宽度为:3.2CM,当你输入完毕后,你会发现值自动变成了3.199cm,无论你怎么改,你都无法输入3.200CM,因为实际上在电脑中存储的并不是CM为单位的数值,而是“缇”为单位的数值,而“缇”和CM之间的比值,是个很难被除尽的数,因此你输入完毕后,电脑自动转换成了最接近的“缇”值,然后再转换成厘米显示到属性面板上,这一乘一除,两次四舍五入,误差就出来了。单精度/双精度也是类似的原理,其实在二进制存储的时候,单精度/双精度都采用了类似相近分数的方法,而这样的存储是不可能做到准确的。

    深入的解释方法:

    让我们来看看我们存储到数字介质中的单精度/双精度值到底是怎么样的,我们使用如下代码对单精度类型进行一个解剖:

    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)


    Public Sub floatTest()
    Dim dblVar As Single

    dblVar = 5.731 / 8
    dblOutput dblVar

    dblVar = dblVar * 2
    dblOutput dblVar

    dblVar = dblVar * 2
    dblOutput dblVar

    dblVar = dblVar * 2
    dblOutput dblVar

    dblVar = dblVar * 2
    dblOutput dblVar

    dblVar = dblVar * 2
    dblOutput dblVar

    End Sub

    Public Sub dblOutput(ByVal dblVar As Single)
    Dim bytVar(3) As Byte
    Dim i As Integer, j As Integer
    Dim strVar As String

    CopyMemory ByVal VarPtr(bytVar(0)), ByVal VarPtr(dblVar), 4
    strVar = dblVar & ": "
    For i = 3 To 0 Step -1
    For j = 7 To 0 Step -1
    strVar = strVar & (bytVar(i) And 2 ^ j) / 2 ^ j
    Next j
    strVar = strVar & " "
    Next i
    Debug.Print strVar

    End Sub
    运行后我们得到输出结果(输出格式为高位左,低位右):

    .716375: 00111111 00110111 01100100 01011010
    1.43275: 00111111 10110111 01100100 01011010
    2.8655: 01000000 00110111 01100100 01011010
    5.731: 01000000 10110111 01100100 01011010
    11.462: 01000001 00110111 01100100 01011010
    22.924: 01000001 10110111 01100100 01011010
    这里,我们把单精度类型转化成了二进制数据输出,这里我们看到,虽然这六个数字完全不同,但是他们的二进制存储惊人地相似,我们看到红色标记部分,每次都是加1,事实上,单精度数据类型使用从高位开始第1位作为正负标记位(绿色),第2位到第9位,是一个跨字节的有符号字节类型数据,这个数值决定了小数点移动的方向和位数(红色),第10位到32位保存一个整数(蓝色)在存储过程中,电脑首先把输入的值不断移位(乘除2)直到这个数的整数部分占用了全部24位的整数位,然后把移动的位数写入浮点部分(红色),而移位后的结果写入整数部分(蓝色和绿色),小数部分则舍弃。求值的时候则是反向过程,先根据正负位和整数位求值,然后根据红色部分的整数来进行移位(乘除2的次方),最终才是我们得到的单精度数值。双精度数值也是同样原理,只是位数更多而已。

    通过解剖单精度数值的二进制存储格式,我们可以清楚看到,实际上单精度/双精度的存储,都要通过乘法和除法,其中必有舍入,如果恰好你的数值在除法中被舍入了,那么你赋的初值就很可能与你最终存储的值不完全相同,其中的微小差异,并不与单精度/双精度的设计目标相违背。

    当我们在数据库中或者VBA代码中使用一个单精度/双精度数值的时候,也许你从界面上看不到区别,但是在实际的存储中,这个差别却真真切切地就在那里,当你对其进行相等比较的时候,系统只是简单地作二进制的比较,界面上无法体现的微小差异,在二进制比较面前却无处遁形,于是,你的等于比较返回了一个意料之外的False。
    展开全文
  • double数值类型用于表示双精度浮点数值; float和double都是浮点型,而decimal是定点型; MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和...

    float数值类型用于表示单精度浮点数值;
    double数值类型用于表示双精度浮点数值;
    float和double都是浮点型,而decimal是定点型;
    MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(7,4)的 可显示为-999.9999,MySQL保存值时进行四舍五入,如果插入999.00009,则结果为999.0001。
    FLOAT和DOUBLE在不指精度时,默认会按照实际的精度来显示,而DECIMAL在不指定精度时,默认整数为10,小数为0。

    展开全文
  • 1)MYSQL日期字段分DATETIME两种,ORACLE日期字段只有DATE2)MYSQL: float(m,d)单精度浮点型 8位精度(4字节) m总个数,d小数位int(m) 4个字节 范围(-2147483648~2147483647)double(m,d)双精度浮点型 16位精度(8字节)...

    1.mySQL和oracle的数据类型区别?

    1)MYSQL日期字段分DATE和TIME两种,ORACLE日期字段只有DATE

    2)MYSQL:     float(m,d)单精度浮点型 8位精度(4字节) m总个数,d小数位

    int(m) 4个字节 范围(-2147483648~2147483647)

    double(m,d)双精度浮点型 16位精度(8字节) m总个数,d小数位

    char(n)固定长度,最多255个字符

    varchar(n)固定长度,最多65535个字符

    tinytext可变长度,最多255个字符

    text可变长度,最多65535个字符

    mediumtext可变长度,最多2的24次方-1个字符

    longtext可变长度,最多2的32次方-1个字符

    date日期 '2008-12-2'

    time时间 '12:25:36'

    datetime日期时间 '2008-12-2 22:06:44'

    timestamp自动存储记录修改时间

    3)ORACLE:  CHAR固定长度字符串最大长度2000bytes

    VARCHAR2可变长度的字符串,最大长度4000bytes可做索引的最大长度749

    NCHAR根据字符集而定的固定长度字符串最大长度2000bytes

    NVARCHAR2根据字符集而定的可变长度字符串最大长度4000bytes

    DATE日期(日-月-年)DD-MM-YY(HH-MI-SS),经过严格测试,无千虫问题

    TIMESTAMP日期(日-月-年)DD-MM-YY(HH-MI-SS:FF3),经过严格测试,无千虫问题与DATE相比较,TIMESTAMP有小数位秒信息

    LONG超长字符串最大长度2G,足够存储大部头著作

    BLOB二进制数据最大长度4G

    CLOB字符数据最大长度4G

    ROWID数据表中记录的唯一行号10bytesxxxx.xxx.xxx格式,x为0或1

    NROWID二进制数据表中记录的唯一行号最大长度4000bytes

    NUMBER(P,S)数字类型P为整数位,S为小数位

    FLOAT浮点数类型NUMBER(38),双精度

    REAL实数类型NUMBER(63),精度更

    4)CHAR,VARCHAR,VARCHAR2他们的区别?

    CHAR是定长的,即:比方其长度为10,我们存入6个长度,那么剩余的4个长度的位置就会用空格被补齐;

    VARCHAR是标准的SQL数据类型,是变长的,即:比方长度为10,我们存入6个长度,那么剩余的4个就会被截掉;

    VARCHAR2是Oracle独有的数据类型,同VARCHAR一样是变长的.

    可能还有些没有列出。

    展开全文
  • 整数型:byte 字节类型:1个字节(8位)short 短整型:2个字节(16位)int 整数类型:4个字节(32位) Java默认long 整型:8个字节(64位)浮点型:float 浮点型(单精度):4个字节(32位)double 双精度类型(双精度):...

    1.==

    (1)基本数据类型:比较值

    基本类型有8种:

    整数型:byte 字节类型:1个字节(8位)

    short 短整型:2个字节(16位)

    int  整数类型:4个字节(32位)   Java默认

    long  长整型:8个字节(64位)

    浮点型:float  浮点型(单精度):4个字节(32位)

    double 双精度类型(双精度):8个字节(64位)  Java默认

    逻辑型:boolean 布尔类型:1/8个字节(1位)

    字符型:char  字符型:2个字节(16位)

    注意: 基本类型在栈中可以直接分配内存的是

    引用类型的引用在栈中,它的对象在堆中

    基本类型:

    基本类型自然不用说了,它的值就是一个数字,一个字符或一个布尔值。

    引用类型:

    是一个对象类型,值是什么呢?它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。

    (2)复合数据类型:比较在内存中的地址,除非是同一个new出来的对象

    2.equals:在Java中的类都是继成Object这个基类,在Object这个基类中定义了equals的方法,源代码时比较内存地址的,但在一些类库中是覆盖了该方法,如String、Integer、Date等,比较的是它们的内容。

    Java  String类的equals源码:https://blog.csdn.net/helllochun/article/details/45074179

    具体实例:http://www.cnblogs.com/zhxhdean/archive/2011/03/25/1995431.html

    展开全文
  • float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,floatdouble都是浮点型,而decimal是定点型;MySQL 浮点型定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示...
  • 枚举变量只能针对无符号整型数据U32,U16,U8; 而下拉列表则可以包括扩展精度,双精度,单精度,64位、、双字节、单字节整型以及各种无符号整型(如下图黑色部分)。  下拉列表...
  • C语言标识符分类 第一类:关键字 定义 由C语言规定的具有特定意义的字符串,通常也称为保留...声明双精度变量或函数 enum 声明枚举类型 float 声明浮点型变量或函数 int 声明整型变量或函数 long 声明整型变
  • # MySQL类型float double decimal的区别loat数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,floatdouble都是浮点型,而decimal是定点型;MySQL 浮点型定点型可以用类型名称后加(M,D...
  • 1.基本数据类型 Java中有八种基本数据类型,分别是: byte:字节,内存中占8位,即一个字节,默认值为0。 short:短整型,内存中占2个字节,...double:双精度浮点型,内存中占8个字节,默认值为0。 char:字符型,...
  • Java语言提供了八种基本类型:  六种数字类型(四个整数型,两个浮点型)  字节型byte 8位 短整型short 16位 整型int 32位... 单精度float 32位 双精度double 64位  一种字符类型  字符型char 8位  还有...
  • 不过你们知道这个引号中能装多少东西吗? 翻了一翻大一的C语言教材,找到了这样一行字。 在C语言中printf函数的转换说明的一般形式为: %[标志][输出最小域宽][.精度][长度]转换字符 找到了一位大佬解释的C语言...
  • float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,floatdouble都是浮点型,而decimal是定点型; MySQL 浮点型定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D...
  • float类型表示单精度浮点数值,double类型表示双精度浮点数值,floatdouble都是浮点型,而decimal是定点型; MySQL 浮点型定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度...
  • mysql中float、double、decimal的区别

    万次阅读 2018-08-01 09:40:17
    float类型表示单精度浮点数值,double类型表示双精度浮点数值,floatdouble都是浮点型,而decimal是定点型; MySQL 浮点型定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的...
  • double数值类型表示双精度浮点数值 decimal是定点型 可用类型名称后加(M,D)来表示浮点型定点型,其中M表示该值的总共长度(精度),D表示小数点后面的长度(标度),如float(7,5)的可显示为-999.99999,MySQL保存值...
  • float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,floatdouble都是浮点型,而decimal是定点型;MySQL 浮点型定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示...
  • float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,floatdouble都是浮点型,而decimal是定点型;MySQL 浮点型定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示...
  • float数值类型用于表示单精度浮点数值,而double数值类型用于表示双精度浮点数值,floatdouble都是浮点型,而decimal是定点型;MySQL 浮点型定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示...

空空如也

空空如也

1 2 3 4 5 6
收藏数 114
精华内容 45
关键字:

双精度和长双精度区别