Office中国论坛/Access中国论坛

标题: [已解决]关于分段计算利息的问题! [打印本页]

作者: wjb5645    时间: 2007-12-30 23:07
标题: [已解决]关于分段计算利息的问题!
在表中有一数列:3  5  8  12  17  23  28   35  46
需将某数分割成如以上数列,最后一位是余数
例1:  将37 分成如下:
3  5  8   12    9
例2:   将87分成如下:
3  5  8  12  17  23  19
\
更新了一下标题,方便其他朋友阅读

[ 本帖最后由 cuxun 于 2008-1-3 23:40 编辑 ]
作者: iamee    时间: 2007-12-31 00:07
Dim b
    Dim str As String
    Dim M As Integer
    Dim N As Integer
   
    M = InputBox("请输入一整数", , 87)
    b = Split("3 5 8 12 17 23 28 35 46", " ")
    For i = 0 To 8
        If M - N > b(i + 1) Then
            N = N + b(i)
            str = str & b(i) & " "
        Else
            str = str & M - N
            MsgBox str
            Exit Sub
        End If
    Next i
作者: wjb5645    时间: 2007-12-31 11:51
非常感谢 iamee
       能否再帮我改写成函数,我想在查询中用,有点象计算贷款逾期计息的问题,  3 5 8 12 17....这一数列代表(因常要变动也就放在表中)贷款天数段利息不同.
如:
某客户贷了一笔款总 87天,前3天的利息是1分,第4天到第5天的利息是1.5分,第6天到第8天的利息是1.8分, 类推..........
因此是需要把众客户的贷款天数进行分割.
作者: wjb5645    时间: 2007-12-31 12:19
再说明:
要求如87天查询出来的是7条记录
作者: iamee    时间: 2007-12-31 15:33
Public Function strReturn(M As String, N As Integer) As String'M是数列,N是贷款天数
    Dim S As String
    Dim B
    Dim SumM As Integer
    S = Val(M)
    B = Split(M)
    For i = 0 To Len(M) - Len(S)
        SumM = SumM + B(i)
        If N > SumM Then
            strReturn = strReturn & B(i) & " "
        Else
            strReturn = strReturn & N - (SumM - B(i))
            Exit For
        End If
    Next i
End Function
你上传个附件,大家帮你试试
作者: wjb5645    时间: 2007-12-31 21:32
谢谢!!!
现将附件上传,请帮忙看看!
[attach]27592[/attach]
作者: wwwwa    时间: 2008-1-3 09:17
SELECT a.*, b.截止, b.天利息
FROM 查询1 AS a LEFT JOIN 查询2 AS b ON b.lj<=a.欠天数;
union
SELECT a.*,(select 欠天数-sum(截止) from 查询2 where lj<=[欠天数]) AS 表达式1, 0
FROM newtt AS a;

查询2:
SELECT (select sum(截止) from 计息区段 where id<=a.id) AS lj, *
FROM 计息区段 AS a;

newtt:
SELECT 出库单明细.供应商ID, 出库单明细.增票日期, Sum(出库单明细.金额) AS 小计, Date()-[增票日期] AS 欠天数
into newtt FROM 出库单明细
GROUP BY 出库单明细.供应商ID, 出库单明细.增票日期, Date()-[增票日期]
HAVING (((出库单明细.供应商ID)=30))
ORDER BY 出库单明细.增票日期 DESC
WITH OWNERACCESS OPTION;

[ 本帖最后由 wwwwa 于 2008-1-3 14:44 编辑 ]
作者: wjb5645    时间: 2008-1-3 15:20
非常感谢楼上二位
可能是我没表达清楚,最好是能从"整理"查询后,再查询出象"计息临时表"里那样的内容

上传附件:
[attach]27616[/attach]
作者: wwwwa    时间: 2008-1-3 16:17
将我的代码修改一下即可:
SELECT a.*, b.截止 AS 区段, b.天利息 AS 息段
FROM 查询1 AS a LEFT JOIN 查询2 AS b ON b.lj<=a.欠天数;
UNION SELECT a.*,(select 欠天数-sum(截止) from 查询2 where lj<=[欠天数]) AS 表达式1, 0.0015
FROM newtt AS a

查询2:
SELECT (select sum(截止) from 计息区段 where id<=a.id) AS lj, *
FROM 计息区段 AS a;

newtt:
SELECT 出库单明细.供应商ID, 出库单明细.增票日期, Sum(出库单明细.金额) AS 小计, Date()-[增票日期] AS 欠天数
into newtt FROM 出库单明细
GROUP BY 出库单明细.供应商ID, 出库单明细.增票日期, Date()-[增票日期]
HAVING (((出库单明细.供应商ID)=30))
ORDER BY 出库单明细.增票日期 DESC
WITH OWNERACCESS OPTION;

查询1用你的
作者: wjb5645    时间: 2008-1-3 16:53
九楼的结果不对,函数好象没有分时段和利息段分别计算再累加
wwwwa:
您能帮我在我传的附件上改改,再传上来吗?
作者: wjb5645    时间: 2008-1-3 17:37
如欠27天的利息结果=小计*5*0.001+小计*15*0.0012+小计*7*0.0018
作者: wjb5645    时间: 2008-1-3 17:47
上面的后面错了,更正如下:

如欠27天的利息结果=小计X5X0.001+小计X15X0.0012+小计X7X0.0015
如欠78天的利息结果=小计X5X0.001+小计X15X0.0012+小计X30X0.0015+小计X28X0.0018
作者: wjb5645    时间: 2008-1-3 20:26
您可能还没理解的的意思,是分时段计息:
如上例总欠27天,:
1. 第1天到第5天是第1时段,按对应的利息是0.001元/天(第一息段)
2. 第6天到第10天是第2时段,按对应的利息是0.0012元/天(第2息段)
3. 剩下的12天是第3时段(第11~15天),利息也就按第3息段计算12天.
作者: wjb5645    时间: 2008-1-3 20:31
抱歉!!!
是我把16搂的27天的写错了,按您17搂的结果就是对的
作者: wjb5645    时间: 2008-1-3 22:28
再次感谢,大肚鸭版主!!!
        您的给的计息合计函数是对的,我这几天搞的头都有点大了自己都颠三倒四了,哈哈.不好意思.
        你能再帮我写个能依次显示的吗,我对ADO,DAO,写函数一巧不通,省的我还要用很长的时间来研究你的函数,从中插个追加查询一条条追加到一个表上,哈哈我是不是太菜了呀
作者: wjb5645    时间: 2008-1-3 23:30
标题: 问题已解决
太感谢了,大肚鸭版子
问题得到了圆满的解决.
同时再次感谢楼上的各位朋友.
作者: zhouchina    时间: 2009-4-19 06:08
我也需要这个问题
作者: zhouchina    时间: 2009-4-19 06:08
来学习学习
作者: sxgaobo    时间: 2009-4-19 16:09
解压的密码是多少啊?
作者: wang_xinggang    时间: 2009-5-31 22:19
解压密码没有??




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3