...奇进偶不进程序,(1)如:1.25=1.2.1.35=1.4,保留至0.1。(2)与保留至...

发布网友

我来回答

2个回答

热心网友

方法一:函数公式实现
具体过程:
A2为需要修约的数据
B2为需要修约的位数
C2为修约结果,公式如下:
IF(((A2*10^(B2+1)-INT(A2*10^(B2+1)))<=0)*(MOD(TRUNC(A2*10^(B2+1)),5)=0)*(1-MOD(INT(A2*10^B2),2))=1,TRUNC(A2,B2),ROUND(A2,B2))

讲解:
1.1 ((A2*10^(B2+1)-TRUNC(A2*10^(B2+1)))<=0)判断需要修约的多一位上是否还有数据,如果有就返回0,没有返回1.
1.2 (MOD(TRUNC(A2*10^(B2+1)),5)=0)判断需要修约下一位是否为5,是5返回1不是5返回0
1.3 (1-MOD(INT(A2*10^B2),2))判断修约位数是否为双数 双数返回1 单数返回0
当1.1 1.2 1.3均为1的时候(即修约下两位没有数下一位且为5修约位数为双数,例如0.245,这时候不能四舍五入了,而是要去掉修约位数下一位的5,变为0.24)

附:
1)将A1修约成整数时的公式如下:
IF(((A1*10^1-INT(A1*10^1))<=0)*(MOD(TRUNC(A1*10^1),5)=0)*(1-MOD(INT(A1*10^0),2))=1,TRUNC(A1,0),ROUND(A1,0))

2)将A1修约成一位小数时的公式如下:
IF(((A1*10^2-INT(A1*10^2))<=0)*(MOD(TRUNC(A1*10^2),5)=0)*(1-MOD(INT(A1*10^1),2))=1,TRUNC(A1,1),ROUND(A1,1))

3)将A1修约成二位小数时的公式如下:
IF(((A1*10^3-INT(A1*10^3))<=0)*(MOD(TRUNC(A1*10^3),5)=0)*(1-MOD(INT(A1*10^2),2))=1,TRUNC(A1,2),ROUND(A1,2))

4)将A1修约成三位小数时的公式如下:
IF(((A1*10^4-INT(A1*10^4))<=0)*(MOD(TRUNC(A1*10^4),5)=0)*(1-MOD(INT(A1*10^3),2))=1,TRUNC(A1,3),ROUND(A1,3))

方法二:VBA实现
实施步骤:打开Excel,进入VBA编辑界面(快捷键ALT+F11),在菜单上点击[插入]->[模块],然后输入下列代码即可在Excel中象系统函数那样直接引用,函数格式XYS(number,num_digits)。

Public Function XYS(X As Double, mm As Integer) As Double
Dim Temp1, Temp2 As String
Temp1 = 1
If mm < 0 Then
Temp1 = 10 ^ Abs(mm)
X = X / Temp1
mm = 0
End If
If ((Int((Abs(X) - Int(Abs(X))) * 10 ^ mm) Mod 2) = 0 And (Abs(X) * 10 ^ mm - Int(Abs(X) * 10 ^ mm)) <= 0.5) And X <> Val(Round(Abs(X), mm) * Sgn(X)) Then
XYS = Val((Round(Abs(X) - 10 ^ (-mm) / 5, mm)))
Else
XYS = Val(Round(Abs(X), mm))
End If
XYS = Val(XYS * Sgn(X) * Temp1)
End Function

热心网友

=IF(RIGHT(TRUNC(A1,2))="5",IF(MOD(RIGHT(TRUNC(A1,1)),2),CEILING(A1,0.1),FLOOR(A1,0.1)),ROUND(A1,1))

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com