excel里面进行四舍六入五单双的公式怎么编写

例如:修约为两位小数
0.3330→0.33 第三位小于5,第二位不加1
0.3340→0.33 第三位小于5,第二位不加1
0.3360→0.34 第三位小于5,第二位不加1
0.3350→0.34 第三位等于5,第四位为零,第二位是单数(奇数),第二位加1
0.3450→0.34 第三位等于5,第四位为零,第二位是双数(偶数),第二位不加1
0.3456→0.35 第三位等于5,第四位不为零,第二位加1

=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函数。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-28
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))
罗嗦了点,但整数前都可以取
第2个回答  2013-08-28
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
第3个回答  2023-04-11
这两个公式都能用,第一个短一点,第二个逻辑好懂一点,随便选一个复制过去就行:
=ROUND(A1,B1)-(ROUNDDOWN(MOD(ABS(A1)*10^(B1+1),20),11)=5)/10^B1*((A1>0)*2-1)
=IF(ROUNDDOWN(MOD(ABS(A1)*10^(B1+1),20),11)=5,ROUNDDOWN(A1,B1),ROUND(A1,B1))
这两个都是excel里把"A1"进行四舍六入保留到"B1"位的函数,针对正负数都通用。
公式里的"B1"可以改成数字使用,想保留几位小数就改成几,保留到十位百位就用"-1""-2"。
注:修约规则参考:GB/T 8170-2008 《数值修约规则与极限数值的表示和判定》。本回答被网友采纳
第4个回答  2018-01-11
如果按修约规则,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))
相似回答