各位你们做工资系统时,工资字段设得是什么类型呀,怎么不让它们四舍五入。

DTWUJP 2002-01-03 06:02:00
数据库为ACCESS 2000
我现在用单精度型,固定二位小数,但在用sql求和计算后, 例
1949995.10+77498.38=272484.50
我想要小数后,仍是272484.48
这样表就不平了。该怎么办。急,再次感谢。


...全文
544 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
muxia 2002-01-04
  • 打赏
  • 举报
回复
用numeric(7,2)试试
DTWUJP 2002-01-04
  • 打赏
  • 举报
回复
谢谢,再看看有好主意吗。
DTWUJP 2002-01-04
  • 打赏
  • 举报
回复
谢谢各位的热情参与。结帐 
calligraphy 2002-01-04
  • 打赏
  • 举报
回复
我用string,取出后,自己计算,就不会出现问题了(自己编个取小数点后位数的函数)
muxia 2002-01-04
  • 打赏
  • 举报
回复
我试过了,在access2000中定义字段salary 为双精度型 格式 为常规数字,小数位 2
程序中
工资=format(工资,"0.00") 工资变量类型为double型,为single型时 工资值在(如1949995.10 )format后会有误差 然后保存到数据库中
用sql 合计时得到你所想要的正确结果
hcyzs 2002-01-04
  • 打赏
  • 举报
回复
工资=format(工资,"0.00") '保留两位小数
工资=format(工资,"0.0") '保留一位小数

本人有工资软件, http://china-soft.3322.net
haisuifeng 2002-01-04
  • 打赏
  • 举报
回复
用numeric类型 在他的后面可以设置小数点的位数 而且都是四舍五入的
统计的时候 也都是两位 ,如果是统计的结果不放在表里 ,那只好用format了
fuxc 2002-01-04
  • 打赏
  • 举报
回复
ACCESS下面试了一下,果然不行
我看你在更新数据之前,在VB里用FORMAT函数处理成2位在写进数据库吧

或者用整型,内部都以分为单位处理,输出时/100就行了,用UPDATE更新一下数据库,统一乘以100,再改数据类型,这样的话处理程序基本不用变,输出之前SELECT **/100 ... 就可以了。
DTWUJP 2002-01-04
  • 打赏
  • 举报
回复
输入绝对是二位,根本没有用round,我怕它还来不及
muxia 2002-01-04
  • 打赏
  • 举报
回复
还有你数据保存的时候是否确定已是小数两位,最好用format(,"0.00")格式一下在保存
数据,用round函数会有问题,这样就跟你字段数据类型无关(不管是double,single型)了
DTWUJP 2002-01-03
  • 打赏
  • 举报
回复
我一开始用的money,也是有误差的,换了半天也不行,就差文本型的了。
crystal_heart 2002-01-03
  • 打赏
  • 举报
回复
单精度或者双精度的小数在电脑里是以二进制存储的。用来存储有关钱的数据不合适。
DTWUJP 2002-01-03
  • 打赏
  • 举报
回复
都试了,不行。
heyijpn 2002-01-03
  • 打赏
  • 举报
回复
用double类型
DTWUJP 2002-01-03
  • 打赏
  • 举报
回复
顶前
DTWUJP 2002-01-03
  • 打赏
  • 举报
回复
在职合计中
应发合计=149937.28 在aCCESS中,显示为149937.28 单击显示为:149937.275817871
离退合计中
应发合计=461023.05 .....................................461023.04864502
全院总计
  应发合计=610906.32........................................610960.324462891
要求为:
应发合计=610906.33

对,就是这样,在个人工资中是固定的两位数字,单击后也是两位,但在求和后,这些就变成小数后一长串了。
我的意思是让它只涉及两位数字计算,不要后面的这一串东西。因为个人工资中是固定的两位数字,加减后,一定是两位。就象:
23.57-12.33=11.24
不要那么复杂。这个数据定义成什么类别最好。一天了,让这拦住了。
谁作过工资呀,你们是怎么做的,怎么处理这种情况呢。

fuxc(Michael),请帮助在access 2000中怎么处理呢,计算后仍是两位,不要那么多。
这个问题不该有多难,那么多金融计算,应该有一个好办法的。
fuxc 2002-01-03
  • 打赏
  • 举报
回复
检查一下你参与计算的数字吧,里面是否有3位小树,虽然只显示两位,但它是四舍五入的
比如:1949995.104+77498.384=272484.498 四舍五入后= 272484.50

sqlserver可以用cast函数解决:你看一下下面的一段查询,access是否有同样的函数就不知道了,不过最好还是规范你的数据源

SELECT CAST(1949995.104 AS decimal(10, 2)) + CAST(77498.384 AS decimal(10, 2)) AS aa,
CAST(1949995.104 + 77498.384 AS decimal(10, 2)) AS bb,
1949995.104 + 77498.384 AS cc
DTWUJP 2002-01-03
  • 打赏
  • 举报
回复
哎,
DTWUJP 2002-01-03
  • 打赏
  • 举报
回复
有做过工资的吗,这种错误怎么才能必免呢。
DTWUJP 2002-01-03
  • 打赏
  • 举报
回复
那也不能准确,我的小数只有两位,且必须计算准确。也就是说只涉及两位计算,不要别的。
加载更多回复(6)

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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