选择数据类型以及如何理解它们

时间:2011-10-28 19:07:56

标签: types

我正在处理一些小项目,并不完全了解数据类型及其用途。以下是我正在努力解决的一些问题。

我将使用哪种数据类型来表示:

  • 一个人的薪水?
  • 一个人的出生日期?
  • 一个人的名字?
  • 一个人的社会安全号码?
  • 一个人要征税的家属人数?
  • 地球的重量?

数据类型是否有坚如磐石的资源?

3 个答案:

答案 0 :(得分:3)

  • 金钱(工资):Decimal
  • 生日:DateTime
  • 姓名:String
  • 社会安全号码:String
  • 地球的重量:floatdouble

解释

货币

  

十进制值类型适用于需要大量有效积分和小数位且没有舍入误差的财务计算。 Decimal类型不会消除舍入的需要。相反,它最大限度地减少了因舍入而导致的错误。 - MSDN

它也不能是一个整数,因为你需要一个小数点($ 59.9)而整数不能有一个,你必须转换它,例如有一个演员阵容,总是为你完成:((int)7.001) == 8true

您也不会使用字符串。文本只是错误的表示(量化钱不会产生字符列表,对吧?)。而且你也喜欢运行一些数学运算,我敢肯定,你不能直接使用字符串,因为它不是数字。例如。 2 + 2 = 4。尝试使用相同的字符串:"2" + "2" = "22"+重载:它为数字添加并连接字符串)。

编辑:我对此的看法已经改变了!

众所周知,计算机和浮点非常复杂,甚至容易出错(如果您不确切知道自己在做什么)。我建议不要将它们用于金钱或任何精确的用途。危急。

我建议使用不会溢出的整数类型(任意大小使用BigInteger)并使用它来表示所需的最低分辨率。例如。将美元表示为美分你可能没问题,所以150就是你代表1.5的方式。远离舍入错误和可怕的IEEE标准!哇噢!加上计算机的整数速度更快,所以通常会获得更好的性能,特别是如果你可以设法使用int,即你某些它不会溢出。

电话号码&安全号码

电话号码和安全号码被称为号码,但实际上它们只是一串数字,不是吗?至少这似乎是普遍的看法。那已经告诉你了:用一根绳子 您也不太可能使用电话号码进行数学运算? (虽然我认为总结电话号码会让人心旷神怡。)

生日

DateTime是日期的标准.NET类型,我确信没有必要解释原因,这个名称是不言自明的。

名称

字符串,原因很明显。

重量

doublefloat用于此类事情。 这取决于你想要多少精度。 Double给你更多,但权衡是它需要更多的内存。当你有大量的时候它只会产生真正的不同。我的经验法则是使用双打,除非我实际上需要使用单个/浮点数。话虽如此,根据我的经验,几乎所有具有类似内容的游戏(重力值,重量等)通常是float而很少是double。有时,域名会在你工作时给你一个不同的经验法则。

浮动与放大之间的差异双倍:link&另一个link

答案 1 :(得分:1)

薪水 - 使用float或double;两者都代表十进制,后者是双精度,你可能不需要,因为钱通常只有2-3位小数
DoB - 取决于语言,大多数高级语言具有Date或DateTime对象类型,否则您可能使用字符串或char数组,甚至创建自己的Date类
名称 - 显然是字符串或字符数组
ssn - 由于被视为一串字符(也可能包含非数字字符' - ')而不一定是一个数值,您可以将其存储为字符串或字符数组。同样适用于手机#
依赖者数量 - 因为只能是整数而不是小数,所以请使用整数
重量 - 再次可以用十进制数表示,所以浮点数或双数

答案 2 :(得分:0)

考虑每个问题所代表的值。

工资是指以美元和美分(至少在美国)代表的货币,因此您需要某种十进制/浮动类型

出生日期代表一个简单的日期

名称代表一个字符串

社会安全号码代表一个字符串

税的家属数是一个整数类型,因为它是一个整数

地球的重量也是某种十进制/浮点数

这是家庭作业吗?你也没有提到什么类型的编程语言,但这两种方式都是类型,通常由字符串,日期,数字,小数等组成。