在EXCEL里如何实现四舍六入,五考虑。(五后为零时,奇数进一,偶数舍去),保留1个小数。

例如,43.550时为45.5,如果是43.551时为45.6

第1个回答  2012-03-15
=IF(RIGHT(INT(A1*100))-5,ROUND(A1,1),ROUNDDOWN(A1,1)+MOD(RIGHT(INT(A1*1000)),2)/10)
第2个回答  2012-03-15
前提:小数都是3位小数

=IF((MID((A1-INT(A1)),4,1))/1<>5,ROUND(A1,1),IF(MOD(RIGHT(A1,1),2)=0,ROUNDUP(A1,1),ROUNDDOWN(A1,1)))追问

公式完成了一部分,麻烦再弄一下。现在输入38.751时,未能跳动成38.8,但是输入38.752时,又能自动修约到我想要的结果38.8了。现在是奇数时没进,偶数时自动进了。我说的五后为零的五是指第二个小数,当第二个小数是4或4以下时,舍去,是6或6以上时,自动加一,当是第二个小数是5时,第一个小数是偶数就舍去(但是5后面有数值还是进一,如果没有就舍去),当第一位小数是奇数时,无论5后有数或者没数都要进一
能不能不限制小数

追答

看得晕掉,你能不能给出你要得各种情况的结果例子,我再帮你改公式
比如:
原值 结果
35.441 35.4
35.461 35.5
35.551 35.6?
35.55 35.6?
35.45 35.4?
35.452 35.5?

追问

35.550 等35.5 我只要要一个小数点
35.551等35.6 35.552等35.6 和上面一样
35.452等35.5。如果是35.450就是35.4了
35.441是35.4第二个小数是4或以下都不进一
35.661等35.7
我要约到第一个小数,不是就得依靠第二个小数来判断嘛,如果第二个小数是4或者以下,就直觉舍,6或者以上就直接进一,如果第二个小数是5,那第一个小数是奇数就直接进一,如果是偶数就看有没有第三个小数,有的就进1,没有的就舍

追答

你好像说错一个吧?35.55这种情况,第二位小数是5,第一位小数是奇数,应该进一结果为35.6啊,对吗?试试下面这个公式:
=IF(MID(TEXT((A1-INT(A1))*100,0),2,1)/15,ROUND(A1,1),IF(MOD(INT((A1-INT(A1))*10),2)0,ROUNDUP(A1,1),IF(MOD(INT((A1-INT(A1))*1000),10)=0,ROUNDDOWN(A1,1),ROUNDUP(A1,1))))

追问

嗯,这个应该是35.6。我试了下公式35.65的时候,应该为35.6,不是35.7啊。还有35.251的时候应该是35.3了 应为5后面有个数值1了,但是换成35.451的时候却又能成功为35.5了。你的公式前提是3个小数吗。辛苦了

追答

现在不限制小数位数了。我改了下,你再试试
=IF(MID(TEXT((A5-INT(A5))*100,0),2,1)/15,ROUND(A5,1),IF(MOD(INT((A5-INT(A5))*10),2)0,ROUNDUP(A5,1),IF(MOD(ROUND((A5-INT(A5))*1000,0),10)=0,ROUNDDOWN(A5,1),ROUNDUP(A5,1))))

追问

这个公式是不是出现错误了啊,输入没反应呢

追答

抱歉复制的时候没选到第一行,A5全换成A1就成了。
=IF(MID(TEXT((A1-INT(A1))*100,0),2,1)/15,ROUND(A1,1),IF(MOD(INT((A1-INT(A1))*10),2)0,ROUNDUP(A1,1),IF(MOD(ROUND((A1-INT(A1))*1000,0),10)=0,ROUNDDOWN(A1,1),ROUNDUP(A1,1))))

追问

如果弄成两位小数 三位小数的话修改哪里呢。

追答

没懂你的意思,你是说结果保留2位小数或者3位小数么?

追问

嗯,就是这个意思,修约的法则不变,但是要保留2位小数或者3位小数 甚至4位的时候呢

追答

那就要改所有round,roundup和rounddown函数,比如保留2位小数,round(a1,1)就要改成round(a1,2)。同时判定条件也需要修改,比如:判断第三位小数是否为5,MID(TEXT((A1-INT(A1))*100,0),2,1)/15,就要改成MID(TEXT((A1-INT(A1))*1000,0),3,1)/15。因为这个公式里判定条件多,我就不一一列举了,你可以自己慢慢调,把一个多重函数从里到外一层层拆开就懂了。解释下用到公式的主要逻辑:
A1-INT(A1),这是取纯小数部分
TEXT((A1-INT(A1)*100,0),这是放大100倍后把原小数点后两位变成整数,并忽略小数点2位后面的数字
MID(TEXT((A1-INT(A1))*100,0),2,1)/1,这是取原小数点后第二位数字,并转换成数字格式,准备判定是否=5

本回答被提问者采纳
相似回答