浮点类型

是有小数部分的数字。表示的范围比整数类型更大,可存储比Int类型更大或更小的数字。

提供了3种表示形式:

(1)Float 表示32位浮点数,可精确到小数点后6位。

(2)Double 表示64位浮点数,可精确到小数点后15位。

(3)Float80 表示80位浮点数,可精确到小数点后17位。

※Float32和Float64分别是Float和Double的类型别名

varfloatv:Float=0.12345678912345//0.1234568varfloatv2:Float=123.123456789//123.1235vardoublev:Double=0.1234567890123456789123//0.1234567890123457vardoublev2:Double=1234.1234567890456789//1234.123456789046varfloat80v:Float80=0.12345678901234567891234//0.123456789012345679varfloat80v2:Float80=1234.1234567890456789//1234.12345678904568float80v=0.123456789123456789123456789678//0.123456789123456789float80v=3.123456789123456789123456//3.12345678912345679float80v=3.1234567890123456789123456//3.12345678901234568varfloat32v:Float32=32.14159//Floattypealiasvarfloat64v:Float64=3.141591242342342343//Doubletypealias


选用何种浮点类型,取决于所存储的浮点数的范围,通常情况下,推荐使用Double类型。

如果声明变量或常量时,不指定数据类型,系统默认将浮点类型的变量或常量推断为Double类型。

vartmpva=3.14159//Doubletype


浮点类型的直接数有两种表示形式:

(1)10进制 没有前缀

(2)16进制 前缀是0x


小数点两边必须有至少一个10进制数字或是16进制数字。

还有一个可选的指数(exponent),在10进制浮点数中通过大写或小写的e来指定,如:men = m乘以10的n次方

在16进制浮点数中通过大写或小写的p来指定,如:0xmpn = m对应的10进制数乘以2的n次方

vartmpv1=3.14159e2//314.159vartmpv2=3.14159E-4//0.000314159vartmpv3=0xC.12p3//96.5625vartmpv4=0x0.12P3//0.5625


和整数类型一样,可以给浮点类型的直接数添加若干个0或_,以提供可读性。


计算机在存储浮点数的时候是不准确,对于浮点数的比较需要格外小心。

比较可靠的做法是:比较其差的绝对值是否小于一个非常小的数值。



如果两个不同浮点类型的变量或常量进行运算时,必须进行显式的类型转换,否则会产生编译错误。

varfv1:Float=3.14159vardv1:Double=3.14159//fv1=dv1//cannotassignvalueoftypeDoubletotypeFloat//dv1=fv1//cannotassignvalueoftypeFloattotypeDoublefv1=Float(dv1)dv1=Double(fv1)//errorbinaryoperator+cannotbeappliedtooperandsoftypeFloatandDouble//fv1+dv1fv1+Float(dv1)Double(fv1)+dv1


如果整数类型和浮点类型的变量或常量进行运算时,必须进行显式的类型转换,否则会产生编译错误。

当把浮点类型转换成整数类型时,在该浮点数类型值不超出该整数类型所表示数值范围的前提下,

浮点类型的值的小数部分会被截掉。

varintv:Int=10vardblv:Double=3.14159//intv=dblv//errorcannotassignvalueoftypeDoubletotypeIntintv=Int(dblv)//3//dblv=intv//errocannotassignvalueoftypeInttotypeDoubledblv=3.14159dblv=Double(intv)//errorbinaryoperator+cannotbeappliedtooperandsoftypeIntandDouble//intv+dblvdblv=3.14159intv+Int(dblv)//6Double(intv)+dblv///6.14159


可以把整数类型的直接数直接赋值给浮点类型的变量或常量,

也可把整数类型的直接数和浮点类型的直接数进行运算,系统都会进行隐式类型转换。

但是把浮点类型的直接数赋值给整数类型的变量或常量,会产生编译错误。

dblv=310/0.33.14159+10//13.14159//letcintv:Int=4.14159//cannotconvertvalueoftypeDoubletospecifiedtypeInt//vartmpint:Int=3.14159