注册 登录
编程论坛 VFP论坛

各位高手来看看,这些数字如何取整?

DBFuser 发布于 2023-04-11 21:55, 2010 次点击
[b]有一组数字,假设字段名ABC,长度不同,想取整
比如
5238(想取成5200)
5276(想取成5300)

36840(想取成36800)
36860(想取成36900)

116235(想取成116000)
116760(想取成117000)

数字最大不超过6位数

如果不好搞,那就不分长度,把所有数字向上或向下取整到百位数上,请高手给指点一下


[此贴子已经被作者于2023-4-11 22:08编辑过]

14 回复
#2
sdta2023-04-11 22:24
lnx = 100
a = 36860
? (INT(a/lnx) + IIF(a%lnx<50, 0, 1)) * lnx
#3
sdta2023-04-11 22:28
数字长度在4-5位,用100解决问题
数字长度在6位,用1000解决问题
#4
sdta2023-04-11 22:39
程序代码:
CLEAR
a = 116760
DO CASE
    CASE BETWEEN(LEN(TRANSFORM(a)), 4, 5) && 长度4-5位
        lnx = 100
        lny = 50
    CASE LEN(TRANSFORM(a)) = 6 && 长度6位
        lnx = 1000
        lny = 500
ENDCASE
IF BETWEEN(a, 1000, 999999)
    ? (INT(a/lnx) + IIF(a%lnx<lny, 0, 1)) * lnx
ENDIF


[此贴子已经被作者于2023-4-11 22:40编辑过]

#5
sash2023-04-12 12:31
?IIF(AAA>100000,INT(AAA/1000)*1000,INT(AAA/100)*100)
#6
pvm20002023-04-13 00:19
你这规则不明确,是后三位,还是后四位取整?
#7
pvm20002023-04-13 00:24
整数x取整到百位数的计算方法:
int ( ( x+50)/100 ) * 100
#8
倦猫19732023-04-13 02:53
低手可以看吗?
#9
吹水佬2023-04-13 08:53
看是四舍五入
#10
吹水佬2023-04-13 09:08
?fun(5238)
?fun(5276)
?fun(36840)
?fun(36860)
?fun(116235)
?fun(116760)

FUNCTION fun(n)
    m = 10^INT(LEN(TRANSFORM(n))/2)
    RETURN ROUND(n/m,0) * m
ENDFUNC
#11
sdta2023-04-13 10:09
以下是引用吹水佬在2023-4-13 09:08:51的发言:

?fun(5238)
?fun(5276)
?fun(36840)
?fun(36860)
?fun(116235)
?fun(116760)

FUNCTION fun(n)
    m = 10^INT(LEN(TRANSFORM(n))/2)
    RETURN ROUND(n/m,0) * m
ENDFUNC

吹版这个代码通用,
#12
schtg2023-04-13 10:36
回复 10楼 吹水佬
好!
#13
aqyejun2023-04-14 11:18
#14
cjtang2023-07-17 16:03
round(abc,iif(abc<100000,-2,-3))
#15
dbf永动机2023-08-04 16:11
sele round(字段,-2) from 表 where 字段<10000 union sele round(字段,-3) from 表 where 字段>100000

一句话搞定,哈哈哈哈,简单粗暴,要是还有别位数的,再来一个union
1