社区
C#
帖子详情
单价、金额等数据用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
打赏
收藏
单价、金额等数据用decimal好还是double好?
使用C#2005和SQLServer2000 是不是C#的decimal对应SQL的Money C#的double对应SQL的Float 程序中要有单价金额的钱的数据 应该用C#的decimal好还是 double好?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
MySQL
数据
库存储价格
金额
使用的
数据
类型中float、
double
、
decimal
的区别
float类型表示单精度浮点数值,
double
类型表示双精度浮点数值,float和
double
都是浮点型,而
decimal
是定点型; MySQL 浮点型和定点型可以用类型名称后加(M,D)来表示,M表示该值的总共长度,D表示小数点后面的长度,M和D又称为精度和标度,如float(5,2)的 可显示为999.99,MySQL保存值时会进行四舍五入,如果插入999.009,则结果为999.01。 float和
double
在不指定精度时,默认会按照实际的精度来显示,而
DECIMAL
在不指定精度时,默认整数为1
mysql
金额
decimal
_MySQL
数据
类型
DECIMAL
用法
前言:当我们需要存储小数,并且有精度要求,比如存储
金额
时,通常会考虑使用
DECIMAL
字段类型,可能大部分同学只是对
DECIMAL
类型略有了解,其中的细节还不甚清楚,本篇文章将从零开始,为你讲述
DECIMAL
字段类型的使用场景及方法。1.
DECIMAL
类型简介
DECIMAL
从MySQL 5.1引入,列的声明语法是
DECIMAL
(M,D)。NUMERIC与
DECIMAL
同义,如果字段类型定义为NUM...
MySQL
数据
库存储价格
金额
使用的
数据
类型
使用
decimal
(m,n)这个
数据
类型来精确表达价格。 注意:不要使用float、
double
等浮点
数据
类型,因为它们是不精确的,特别是在计算的时候。
decimal
使用方法:salary
DECIMAL
(5,2)在这个例子中, 5 (精度(precision)) 代表重要的十进制数字的数目, 2 (
数据
范围(scale)) 代表在小数点后的数字位数。 在这种情况下,因此,salary 列
JAVA中如何处理
金额
类
数据
由闲鱼的转账BUG引起的思考 想写这一篇文章主要是前两天看到了一个闲鱼的BUG,而且自己也复现了这个问题。在使用闲鱼的时候当我向好友转账2.1的时候,最终支付宝显示的却只有2.09(前天出现的问题,目前闲鱼已经修复了这个问题)。作为一个消费者这只是一个BUG,但是作为一个JAVA开发,就让我思考到假如这个
金额
的
数据
是需要服务端进行处理?JAVA要如何处理这些
数据
。 我的一分钱呢?????? 这从未设想的问题啊,所以这里就整理下对于服务端 的开发,对于
金额
的处理、储存和传输应该如何操作 JAVA
MySQL
数据
表设计 关于
金额
字段属性
在开发过程中,难免触及到关于
金额
的项目,这时候,
数据
表的设计就得注意了,
金额
的字段属性的给予,需要多加注意,不然容易出错。 先介绍下以下三种属性: float:浮点类型,数值范围为-3.4E38 ~ +3.4E38(也就是7个有效位),含4个字节,32bit;
double
:双精度实型,数值范围为-1.7E308 ~ +1.7E308(也就是15个有效位),含8个字节,32bit;
decimal
:数字型(推荐有
金额
时使用此类型),常用于银行账目计算(也就是28个有效位),128bit,不存在精度损失。当小
C#
110,533
社区成员
642,574
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章