哪种数据类型对java限制小数点位数的位置有明确的位数限制

 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
第1章 C数据类型-2变量的类型决定了什么
下载积分:1500
内容提示:第1章 C数据类型-2变量的类型决定了什么
文档格式:PDF|
浏览次数:59|
上传日期: 08:13:36|
文档星级:
该用户还上传了这些文档
第1章 C数据类型-2变量的类型决定了什么
官方公共微信在数据仓库建模中,很重要的模型就是星型模型,在星型模型中我们将表分为维度表和事实表,事实表中存放的可以进行计算(汇总,平均等)的列就是度量值。要进行计算的度量值,可以选择的数据类型也有好多种,那么我们应该选择哪一种呢?
首先定个大的方向,是整数还是小数?如果是整数,那么我们可以选择的数据类型就只有int和bigint了,16位或者8位的整数基本不用考虑,在数据仓库这种大数据量的环境下,很容易就overflow了。即使是int这种32位的整数,在数据量特别大的情况下,如果要做sum甚至是avg操作,很可能就会溢出,所以一般推荐使用bigint。
对于价格,金额这种类型的数据,一般会记录成小数,而且是两位小数,那么我们使用什么数据类型来进行存储呢?以SQL Server为例,我们可以选择的数据类型包括:
decimal/numeric
1.Float是一个非精确的数据类型,也就是说,存储的数据在读取出来时可能会有一定的误差。在财务这种一分钱都不能差的系统里面,是绝对不能采用的数据类型,在数据仓库中进行sum的话会使得sum的结果与实际结果不一致。但是Float并不是一无是处,笔者使用两千万行的数据对几种小数类型的数据进行性能测试,发现float在进行运算时具有一点优势,另外Float由于内部是采用科学计数法实现,所以可以存储非常非常大的数值。
print convert(money,'');--Error
print convert(decimal,'');--Error
print convert(float,'');--Correct
2.Money是SQL Server特有的数据类型,在Oracle,MySQL中没有对应的类型。money的精度是可以到小数点后4位,所以对于我们平时记录两位小数的金额来说,是满足要求的。如果我们的度量值不是金额,而是其他含义的值,而且精度也不会超过4位小数(比如面积、长度、重量等),那么还是否可以使用money类型呢?如果只是进行sum、avg这样的运算,是完全可以使用money类型的。关于money和decimal的性能,有人专门做了个比较,我也使用两千万的数据进行了sum和avg的比较,发现money在计算上有一定的性能优势,但是这个优势也不是明显到速度能够提高好几倍的程度。老外做的比较的博客:
money类型在进行除法运算的时候,如果没有转换为decimal类型,那么就会造成精度丢失,因为money始终保留4位小数,所以最终结果可能会比decimal类型的有误差。所以最好不要把money类型的数据参与除法运算。
select sum(money1/money2) from testM
如果一定要参与除法运算,那么我们可以将一个money类型和一个decimal类型进行除法运算,这样系统会自动转换成decimal类型,从而避免由于money只保留4位小数造成的精度丢失。
select sum(money1/decimal1) from testM
3.Decimal类型和money类型一样都是精确数值类型,不同之处在于decimal类型可以指定占用的长度和小数后的精度。Decimal可以提供比Money更大的数据范围和更高的精度,当然也会占用更多的存储空间。
如果对于只保留2位小数的度量值,我们可以使用decimal(xx,2)来存储,前面的值根据数据量和数据值的大小来取,我一般写成decimal(18,2)。使用decimal类型进行除法运算时,不会出现money类型遇到的小数精度丢失的问题,即使我们只申明了decimal(xx,2),但是在进行除法运算的过程中,系统会保留很高的小数精度来进行计算。
Decimal的运算性能不如money,但是差距也不是那么的明显,在无法预期的对度量值的运算的情况下,使用decimal更保险。
如果是整数,就用bigint,避免数据量太大造成的int数据溢出。
如果是小数,而且不是那么关心精度,可以使用float,如果要计算的数值非法非常大就必须使用float,但是对于一分钱都不能差的情况下,就不要使用float类型。而应该使用money或者decimal。
如果不会有除法运算,而且数据的精度是在小数点后4位以内,那么使用money,其速度比decimal更快。
如果无法预期会不会有除法运算,或者要求的小数位数精度很高,那么就得使用decimal,速度比money慢一些,但是基本上还在同一个数量级。
阅读(...) 评论()需求/数据类型
数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用
的时候才需要申请大内存,就可以充分利用内存。 例如大胖子必须睡双人床,就给他双人床,瘦的人单人床就够了。
概述/数据类型
根据缺省规定,如果在声明中没有说明数据类型,则令
的数据类型为 Variant。Variant 数据类型很像一条变色龙— 它可在不同场合代表不同数据类型。当指定
为 Variant 变量时,不必在数据类型之间进行转换,Visual Basic 会自动完成各种必要的转换。
但是,如果知道
确实总是存储特定类型的数据,并且还声明了这种特定类型的变量,则 Visual Basic 会以更高的效率处理这个数据。例如,存储人名的
最好表示成 String 数据类型,因为名字总是由
外,数据类型也用于其它场合。在给
赋值时,这个值就有数据类数据类型型;
的参数也有数据类型。事实上,在 Visual Basic 中,凡是与
有关的东西就与数据类型有关。
也可声明任何基本类型的
详细信息 关于更详细信息,请参阅本章后面的“
”部分。在“性能和兼容性的设计”中还将讨论通过选择数据类型来提高
声明变量/数据类型
在使用非 Variant
之前,必须使用 Private、Public、Dim 或 Static
声明为 As type。例如,下列
分别声明了 Integer、Double、String 和 Currency 类型的
Private I As Integer
Dim Amt As Double
Static YourName As String
Public BillsPaid As Currency
可将多个声明组合起来,请看下列语句:
Private I As Integer,Amt As Double
Private YourName As String,BillsPaid As Currency
Private Test,Amount,J As Integer
注意 如果不提供数据类型,则指定
为缺省类型。在上例中,
Test 和 Amount 是 Variant 数据类型。如果由于其它
的经验使人感到同一个声明
都有相同的指定数据类型(此例中为 Integer),那么,此处的结果可能会令人感到新鲜。
数字型/数据类型
概述Visual Basic 支持几种 Numeric 数据类型— Integer(
)、Long(
)、Single(
)、Double(
)和 Currency(货币型)。与 Variant 类型相比,Numeric 类型占用的
通常要数据类型少。
总是存放整数(如 12 )而不是带小数点的
(如 3.57),就应当将它声明为 Integer 类型或 Long 类型。整数的运算速度较快,而且比其它数据类型占据的内存要少。在 For...Next 循环内作为计数器
使用时,整数类型尤为有用。详细信息关于控制结构的详细资料,请参阅本章后面的“控制结构概述”。
包含小数,则可将它们声明为 Single、Double 或 Currency 变量。Currency 数据类型支持小数点右面 4 位和小数点左面 15 位;它是一个精确的定点数据类型,适用于货币计算。浮点(Single 和 Double)数比 Currency 的有效范围大得多,但有可能产生小的进位误差。注意值可表示为 mmmEeee 或 mmmDeee ,其中 mmm 是假数,而 eee 是指数(以 10 为底的幂)。Single 数据类型的最大正数值为 3.,或 3.4 乘以 10 的 38 次方;Double 数据类型的最大正数值是 1.32D+308 或 1.8 乘以 10 的 308 次方。用 D 将数值文字中的假数部分和指数部分隔开,就会导致将该值作为 Double 数据类型来处理。同样,用这种方式使用 E,也会导致将该值作为 Single 数据类型来处理。
字节型/数据类型
包含二进制数,则将它声明为 Byte 数据类型的
。(本章后面的“
”中将讨论数组)。在转换格式期间用 Byte
存储二进制数据就可保留数据。当 String
在 ANSI 和 Unicode 格式间进行转换时,变量中的任何二进制数据都会遭到破坏。在下列任何一种情况下,Visual Basic 都会自动在 ANSI 和 Unicode 之间进行转换: 数据类型读文件时
调用 DLL 时
除一元减法外,所有可对整数进行操作的
均可操作 Byte 数据类型。因为 Byte 是从 0 - 255 的无符号类型,所以不能表示负数。因此,在进行一元减法运算时,Visual Basic 首先将 Byte 转换为符号整数。
都可相互赋值,也可对 Variant 类型变量赋值。 在将浮点数赋予整数之前, Visual Basic要将浮点数的小数部分四舍五入,而不是将小数部分去掉。
详细信息 关于 Unicode 和 ANSI 转换的详细信息,请参阅“国际化”。
文本型/数据类型
总是包含字符串而从不包含数值,就可将其声明为 String 类型。
Private S As String
然后可将字符串赋予这个变量,并用
对它进行操作。
S = "Database"
S = Left (S,4)
按照缺省规定,String
或参数是一个可变
的字符串,随着对字符串赋予新数据,它的长度可增可减。 也可以声明字符串具有固定
。可用以下
声明一个定长字符串:
String * size
例如,为了声明一个
为 50 字符的字符串,可用下列
Dim EmpName As String * 50
如果赋予字符串的字符少于 50 个,则用空格将 EmpName 的不足部分填满。如果赋予字符串的
太长,已不能成为定长字符串,则 Visual Basic 会直接截去超出部分的字符。
因为定长字符串用空格填充尾部多余的空间,所以在处理定长字符串时可发现,删数据类型除空格的 Trim 和 RTrim
是很有用的。
中的定长字符串声明为 Public 或 Private。在
中,必须将定长字符串声明为 Private。
详细信息 请参阅语言参考中的“Ltrim、RTrim Function 和 Trim
类型交换/数据类型
如果字符串表示数值,则可将字符串赋予数值
。也可将数值赋予字符串
。例如,将
和列表框放置在
的 Click 事件中输入下列代码。运行
Private Sub Command1_Click ()
Dim intX As Integer
Dim strY As String
strY = "100.23"
intX = strY '将字符串传递给数值
List1.AddItem Cos (strY) '将字符串中数值的余弦值。
'添加到列表框中。
strY = Cos (strY) '将余弦值传递给字符串
Text1.Text = strY '在
中显示字符串。
Visual Basic 会自动强制
为适当的数据类型。在转换字符串和数值时要小心;如果传送字符串中的值不是数值,则在运行时会出错。
逻辑型/数据类型
的值只是“true/false”、“yes/no”、“on/off”信息,则可将它声明为 Boolean 类型。Boolean 的
为 False。在下面的例子中,blnRunning 是 Boolean
,存储简单的 yes/no 设置。
Dim blnRunning As Boolean
'查看磁带是否在转。
If Recorder.Direction = 1 Then
blnRunning = True
日期型/数据类型
Date 和 Time 值既可包含在特定的 Date 数据类型中,又可包含在 Variant
中。一般的 Date 特性适用于这两种类型。
详细信息 请参阅《联机手册》的“高级
主题”中的“在 Variant 变量中存储 Date/Time 值”部分。
当其它数值数据
为 Date 时,小数点左边的值表示 Date 信息,小数点右边的数据类型值则代表 Time。午夜为 0,正午为 0.5。负数表示公元 1899 年 12 月 31 日之前的 Date。
对象型/数据类型
作为 32 位(4 个
)地址来存储,该地址可引用
中或某些其它
。可以随后(用 Set
)指定一个被声明为 Object 的
去引用应用程序所识别的任何实际
Dim objDb As Object
Set objDb = OpenDatabase ("c:\Vb5\Biblio.mdb")
时,请试用特定的类,而不用一般的 Object(例如用 TextBox 而不用 Control,或者象上面的例子那样,用 Database 取代 Object)。运行
之前,Visual Basic 可以决定引用特定类型
和方法。因此,
在运行时速度会更快。在“
”中列举了特定的类。
当使用其它
”中的“类”列表中列举对象时,不要用 Variant 或一般的 Object,而应声明对象。这样可确保 Visual Basic 能够识别引用的特定类型
,在运行时解决引用问题。
详细信息 关于创建和指定
的更详细信息,请参阅本章后面的“创建对象”部分。
转换类型/数据类型
概述Visual Basic 提供了几种
,可用来将值转换成特定数据类型。例如,用
将值转换成 Currency 类型:&PayPerWeek =
(hours * hourlyPay)
Cbool Boolean
Cbyte Byte
Ccur Currency
Cdate Date
CDbl Double
Cint Integer
CStr String
Cvar Variant
CVErr Error注意对目标数据类型,传递到
的值必须是有效的,否则会发生错误。例如,如果想把 Long 型数转换成 Integer 型数,那么,Long 型数必须在 Integer 数据类型的有效范围之内。
详细信息 在
中查找指定的
变体型/数据类型
概述Variant
能够存储所有
类型的数据。如果把它们赋予 Variant
,则不必在这些数据的类型间进行转换; Visual Basic 会自动完成任何必要的转换。例如:
Dim SomeValue '缺省为 Variant。
SomeValue = "17" 'SomeValue包含 "17"(双字符的串)。
SomeValue = SomeValue - 15 '现在, SomeValue 包含数值 2。
SomeValue = "U" & SomeValue '现在, SomeValue 包含 "U2" (双字符的串)。
不必过多关注 Variant 变量
的类型就可对 Variant 变量进行操作,但须避免落入陷阱。
如果对 Variant 变量进行
运算,则 Variant 必包含某个数。更详细的信息,请参阅《联机手册》中“高级
主题”中的“变量中存储的 Numeric 值”部分。
如果正在连接两个字符串,则用 " & " 操作符而不用 " + " 操作符。更详细的信息,请参阅《联机手册》中“高级
主题”中的“Variant 变量中存储的 Strings”部分。
除了可以像其它标准数据类型一样操作外,Variants 还包含三种特定值:Empty,Null 和 Error。
有时需要知道是否已将一个值赋予所创建的
。在赋值之前,Variant
具有值 Empty。值 Empty 是异于0、零
字符串 ("") 或 Null 值的特定值。可用 IsEmpty
测试 Empty 值:
If IsEmpty (Z) Then Z = 0
当 Variant
包含 Empty 值时,可在
中使用它;将其作为 0 或零
字符串来处理,这要根据表达式来定。
只要将任何值(包括 0、零
字符串或 Null)赋予 Variant
,Empty 值就会消失。而将关键字 Empty 赋予 Variant
,就可将 Variant 变量恢复为 Empty。Null 值Variant 数据类型还可包含一特定值:Null。Null通常用于数据库应用
,表示未知数据或丢失的数据。 由于在数据库中使用 Null 方法,Null 具有某些唯一的特性:
对包含 Null 的
,计算结果总是 Null。于是说 Null 通过
“传播”;如果表达式的部分之值为 Null,那么整个表达式的值也为 Null。
将 Null 值、含 Null 的 Variant
或计算结果为 Null 的表达式作为
,将会使函数返回 Null。
Null 值经由返回 Variant 数据类型的内在
也可用 Null 关键字指定 Null 值。
也可用 IsNull
测试 Variant
是否包含 Null 值。
If IsNull (X) And IsNull (Y) Then
如果将 Null 值赋予 Variant 以外的任何其它类型
,则将出现可以捕获的错误。而将 Null 值赋予 Variant 则不会发生错误,Null 将通过包含 Variant 变量的
传播(尽管 Null 并不通过某些
来传播)。可以从任何具有 Variant 返回值的
过程返回 Null。
除非明确将 Null 赋予
,否则变量不会设置成 Null 值,所以,如果不在
中使用 Null,就不必书写测试 Null 和处理 Null 的程序。
详细信息 关于如何在
中使用 Null 的详细信息,请参阅语言参考的“Null”部分。Error 值在 Variant 中,Error 是特定值,指出已发生的过程中的错误状态。但是,与其它类型错误不同,这里并未发生正常的
级的错误处理。因此,
本身可根据 Error 值进行取舍。利用 CVErr
将实数转换成
就可建立 Error 值。
详细信息 关于如何在表达式中使用 Error 值,请参阅语言参考中的“CVErr
”部分。关于错误处理的信息,请参阅“调试代码和处理错误”。有关 Variant 数据类型的更详细信息,请参阅《联机手册》中的“高级变量主题”。
VB/数据类型
数据类型概述以下表格显示所支持的数据类型,以及存储空间大小与范围。
数据类型 存储空间大小 范围
Boolean 2 个
True 或 False
Integer 2 个
-32,768 到 32,767
-2,147,483,648 到 2,147,483,647
负数时从 -3. 到 -1.;正数时从 1. 到 3.
负数时从 -1.32E308 到
-4.47E-324;正数时从4.47E-324 到 1.32E308
从 -922,337,203,685,477.5808 到 922,337,203,685,477.5807
Decimal 14 个
没有小数点时为 +/-79,228,162,514,264,337,593,543,950,335,而小数点右边有 28 位数时为 +/-7.0335;最小的非零值为 +/-0.0001
100 年 1 月 1 日 到 9999 年 12 月 31 日
Object 4 个
任何 Object 引用
0 到大约 20 亿
(定长) 字符串
1 到大约 65,400
任何数字值,最大可达 Double 的范围
与变长 String 有相同的范围
用户自定义
(利用 Type) 所有元素所需数目 每个元素的范围与它本身的数据类型的范围相同。注意任何数据类型的
都需要 20 个
的内存空间,加上每一数组维数占 4 个字节,再加上数据本身所占用的空间。数据所占用的内存空间可以用
数目乘上每个元素的大小加以计算。例如,以 4 个 2
之 Integer 数据元所组成的一维
中的数据,占 8 个字节。这 8 个
加上额外的 24 个字节,使得这个
所需总内存空间为 32 个字节。
的 Variant 比单独的一个数组需要多 12 个
定类,定序;定比;定距
&|&相关影像
互动百科的词条(含所附图片)系由网友上传,如果涉嫌侵权,请与客服联系,我们将按照法律之相关规定及时进行处理。未经许可,禁止商业网站等复制、抓取本站内容;合理使用者,请注明来源于。
登录后使用互动百科的服务,将会得到个性化的提示和帮助,还有机会和专业认证智愿者沟通。
此词条还可添加&
编辑次数:14次
参与编辑人数:12位
最近更新时间: 06:33:12
贡献光荣榜}

我要回帖

更多关于 python小数点位数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信