单价、金额等数据用decimal好还是double好?

flankerfc 2007-05-20 09:22:23
使用C#2005和SQLServer2000
是不是C#的decimal对应SQL的Money
C#的double对应SQL的Float

程序中要有单价金额的钱的数据
应该用C#的decimal好还是 double好?
...全文
3000 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
flankerfc 2007-05-21
  • 打赏
  • 举报
回复
整形?那除法怎么办?
财运通 2007-05-21
  • 打赏
  • 举报
回复
的却用整型好!
flankerfc 2007-05-21
  • 打赏
  • 举报
回复
这里金额数量是有小数的
yjddit 2007-05-21
  • 打赏
  • 举报
回复
int就用int,如果不涉及到小数的话
flankerfc 2007-05-21
  • 打赏
  • 举报
回复
那SQL Server里面的那几个数据类型呢?

Decimal Float Money?

大家意思是

金钱 在C#中用 decimal 在SQL中用Money
数量 在C#中用 double 在SQL中用Float

是这样子吗?
Ivony 2007-05-21
  • 打赏
  • 举报
回复
MSDN上的确是模棱两可。
“decimal 类型是适合财务和货币计算的 128 位数据类型。”
这句话也说得经不起推敲。

当然,decimal在大多数情况下是安全的,但浮点数在理论上是不安全的。

至于精度误差造成的显示问题,则是很容易修补的。浮点数会带来的问题以及整型能避免的问题就是一个:
譬如说从A帐户转账到B帐户,经计算得出结果是3.788888888888888元,那么我们从A帐户扣除这么多钱,B帐户增加这么多钱,但事实上A帐户不一定会扣除准确的数值,例如A帐户的金额在100000000000,那么这个时候100000000000 - 3.788888888888888运算结果很有可能是100000000006.2。而这个时候B帐户的金额为0则很有可能加上准确的数值,如3.788888888888888,这样一来,0.0222222222222...元钱就会不见了,日积月累的,差额就会越来越大。
当然,中国的银行动不动就是几个亿的呆账,估计是不用考虑这些问题的……
amandag 2007-05-21
  • 打赏
  • 举报
回复
如果就decimal和double的话,肯定选择decimal
dengenming 2007-05-21
  • 打赏
  • 举报
回复
double 偶尔还要convert一下。。。decimal吧
pam 2007-05-21
  • 打赏
  • 举报
回复
to:flankerfc()

你说的这种情况,我在用double时遇见过,后来改成decimal就没出现了
pam 2007-05-21
  • 打赏
  • 举报
回复
是我弄错了,受教了!!!

MSDN说的模棱两可,还是书上说的清楚:
当然,除了整数以外,还可以存储浮点数,它们不是整数。可以使用的浮点数变量类型有3种:float, double和 decimal。前两种可以用+/–m×2e的形式存储浮点数,m和e的值随着类型的不同而不同。Decimal使用另一种形式:+/–m×10e。

另外搜到你的一个帖子。。。呵呵
http://topic.csdn.net/t/20050514/20/4007155.html

decimal也是浮点型,只是精度更高而已

但是,MSDN上也说了:“decimal 类型是适合财务和货币计算的 128 位数据类型。”一般情况下,用decimal也不会有问题吧。
impeller 2007-05-21
  • 打赏
  • 举报
回复
decimal精度高
flankerfc 2007-05-21
  • 打赏
  • 举报
回复
我关键是担心 浮点型的运算 会不会产生 很明显的误差

比如 1.2*2.1= 2.52 会不会出 2.519999999999999
或者 2.0-1.1=0.899999999999

这一类的(这几个式子是我假设的)
flankerfc 2007-05-21
  • 打赏
  • 举报
回复
那么就是 单价,总金额用 decimal 数量用 double ?
这样子两者之间计算会不会有什么问题?
Ivony 2007-05-21
  • 打赏
  • 举报
回复
十进制数是由符号、数值和比例因子组成的'''浮点值''',数值的每一位的范围都是 0 到 9,比例因子指示分隔数值的整数和小数部分的浮点小数点的位置。

查MSDN要查对地方。
setdefault 2007-05-21
  • 打赏
  • 举报
回复
取决于你的应用。
如果是收银用无所谓啦,如果决算周期较长的财务,包含利率、汇率的计算,用精度高的类型。
pam 2007-05-21
  • 打赏
  • 举报
回复
去查了。。。

http://www.msdn.net/library/chs/default.asp?url=/library/CHS/csspec/html/vclrfcsharpspec_4_1_7.asp

decimal 类型是适合财务和货币计算的 128 位数据类型。decimal 类型可以表示具有 28 或 29 个有效数字、从 1.0 × 10-28 到大约 7.9 × 1028 范围内的值。

与浮点型相比,decimal 类型具有较高的精度,但取值范围较小。因此,从浮点型到 decimal 的转换可能会产生溢出异常,而从 decimal 到浮点型的转换则可能导致精度损失。由于这些原因,在浮点型和 decimal 之间不存在隐式转换,如果没有显式地标出强制转换,就不可能在同一表达式中同时使用浮点操作数和 decimal 操作数。
Avoid 2007-05-21
  • 打赏
  • 举报
回复
把金额乘以100进行整数运算
chrisky2006 2007-05-21
  • 打赏
  • 举报
回复
to Ivony(授人以鱼不如授人以渔,上海谋生)
是不是先去掉小数点,然后计算,再确定小数点位置?
说说你的思想
Ivony 2007-05-21
  • 打赏
  • 举报
回复
金额怎么能用整型。。。汗,还是decimal吧,这个也不是浮点型

1、不能用整型是因为根本没去想过
2、decimal不是浮点型?自己去翻MSDN。
curd0468 2007-05-21
  • 打赏
  • 举报
回复
decimal
加载更多回复(12)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧