excel里面进行四舍六入五单双的公式怎么编写
发布网友
发布时间:2022-04-21 03:57
我来回答
共5个回答
热心网友
时间:2022-05-21 08:10
=IF(MOD(INT(A1*1000),5)=0,IF(MOD(INT(A1*100),2)=0,INT(A1*100)/100,ROUND(A1,2)),ROUND(A1,2))
几位想得太复杂了,这样就可以了。
思路:首先,原数乘1000后取整数部分,用MOD判断其能否被5整除,将小数后第三位是5的另外列出来(当然是0的也被挑出来了。
接着(1)若不能,正常四舍五入即可。
(2)若能,则表示小数后第三位是0或5,这时我们判断原数乘100后取整能不能被2整除(这是判断小数点第二位是奇数还是偶数),若能,原数乘100后取整再除以100(这不就是取小数点后两位吗?),若不能,那么直接用ROUND函数。
热心网友
时间:2022-05-21 08:10
A1 为你要的数据
A2 为你要保留的位数
A3 输入公式 =SIGN(A1)*(IF(AND(MID(TEXT(ABS(A1),"0.00000000000000E+000"),A2+2,15-A2)="5"&REPT("0",14-A2),MOD(MID(TEXT(ABS(A1),"0.00000000000000E+000"),A2+(A2>1),1),2)=0),ROUNDDOWN(LEFT(TEXT(ABS(A1),"0.00000000000000E+000"),16),A2-1),ROUND(LEFT(TEXT(ABS(A1),"0.00000000000000E+000"),16),A2-1))&RIGHT(TEXT(ABS(A1),"0.00000000000000E+000"),5))
罗嗦了点,但整数前都可以取
热心网友
时间:2022-05-21 08:11
create function sslr(@num numeric(20,10),@i int)
--@i保留的小数位
--@num传入的数据
returns varchar(20)
as
begin
declare @numtemp numeric(20,10),@result varchar(20)
set @numtemp=abs(@num)*power(10,@i+1)
select @numtemp=(case when floor(@numtemp)-floor(@numtemp/10)*10=5
then (case when @numtemp-floor(@numtemp)=0
then (case when cast(floor(@numtemp/10) as int)%2=0
then floor(@numtemp/10)/power(10,@i)
else round(@numtemp/power(10,@i+1),@i)
end)
else round(@numtemp/power(10,@i+1),@i)
end)
else round(@numtemp/power(10,@i+1),@i)
end)
set @result=(case when @num>0 then str(@numtemp,20,@i) else str(0-@numtemp,20,@i) end)
return @result
end
热心网友
时间:2022-05-21 08:11
这两个公式都能用,第一个短一点,第二个逻辑好懂一点,随便选一个复制过去就行:
=ROUND(A1,B1)-(ROUNDUP(MOD(ABS(A1)*10^(B1+1),20),12)=5)/10^B1*((A1>0)*2-1)
=IF(ROUNDUP(MOD(ABS(A1)*10^(B1+1),20),12)=5,ROUNDDOWN(A1,B1),ROUND(A1,B1))
这两个都是excel里把"A1"进行四舍六入保留到"B1"位的函数,针对正负数都通用。
公式里的"B1"可以改成数字使用,想保留几位小数就改成几,保留到十位百位就用"-1""-2"。
注:修约规则参考:GB/T 8170-2008 《数值修约规则与极限数值的表示和判定》。
热心网友
时间:2022-05-21 08:12
如果按修约规则,1.2451修约到两位小数的话应是1.25,但按这个公式修约成了1.24
=IF(MOD(INT(A1*1000),5)=0,IF(MOD(INT(A1*100),2)=0,INT(A1*100)/100,ROUND(A1,2)),ROUND(A1,2))