文档库 最新最全的文档下载
当前位置:文档库 › 函数

函数

def getTaxRatio(taxSalary):

ratiolist =(

(500, 0.05, 0),

(2000, 0.10, 25),

(5000, 0.15, 125),

(20000, 0.20, 375),

(40000, 0.25, 1375),

(60000, 0.30, 3375),

(80000, 0.35, 6375),

(100000, 0.40, 10375),

(9999999,0.45, 15375)

)

if taxSalary>= 0:

for ratio in ratiolist:

if taxSalary<= ratio[0]:

return (ratio[1], ratio[2])

return (0, 0)

def calcYearAwardTax(yearAward):

monthAward = yearAward / 12

taxRatio, taxAdjust = getTaxRatio(monthAward)

tax = yearAward * taxRatio - taxAdjust

resultAward = yearAward - tax

retcode = (yearAward, resultAward, tax, taxRatio, taxAdjust)

#print('yearAward= %d, resultAward= %f, tax= %f, taxRatio= %f, taxAdjus t= %d'%retcode)

return retcode

################################################# ###############################

import sys

import os

argNum = len(sys.argv)

if argNum == 1:

scriptName = os.path.basename(__file__)

print('usage1: %s awardUpperBound'%scriptName)

print('usage2: %s awardLowerBound awardUpperBound'%scriptName)

sys.exit()

print('-----------------------------------------------------------------------')

awardLowerBound, awardUpperBound = 0, 0

if argNum == 2:

awardUpperBound = int(sys.argv[1])

elif argNum == 3:

awardLowerBound, awardUpperBound = int(sys.argv[1]), int(sys.argv[2])

if awardLowerBound> awardUpperBound:

swap(awardLowerBound, awardUpperBound)

perfectAward, perfectGain = 0, 0

for award in range(awardLowerBound, awardUpperBound + 1):

retcode = calcYearAwardTax(award)

if len(retcode) > 2:

if retcode[1]> perfectGain:

perfectAward = retcode[0]

perfectGain = retcode[1]

if award== awardUpperBound:

print('upperBoundAward= %d,\tgain= %f,\ttax= %f'%(retcode[0], retc ode[1], retcode[0] - retcode[1]))

print("perfectAward= %d,\tgain= %f,\ttax= %f"%(perfectAward, perfectGain, p erfectAward - perfectGain))

保存成文件awardTax.py 然后在命令行调用即可。

比如你年终奖发了25000,则:

ok, 那么你亏了,你比拿24000的同志多交税3625-2375= 1250元,最终收益还比他少21625-21375= 250元。

这个数值段最佳的年终奖数额为24000,因此还是向老板申请少给你发点年终奖吧。posted on 2010-02-11 15:32 李现民阅读(852) 评论(0)编辑收藏引用所属分类: minitools Excel函数应用之数学和三角函数

(陆元婕2001年05月23日10:12)

编者语:Excel是办公室自动化中非常重要的一款软件,很多巨型国际企业都是依靠Excel进行数据管理。它不仅仅能够方便的处理表格和进行图形分析,其更强大的功能体现在对数据的自动处理和计算,然而很多缺少理工科背景或是对Excel强大数据处理功能不了解的人却难以进一步深入。编者以为,对Excel函数应用的不了解正是阻挡普通用户完全掌握Excel的拦路虎,然而目前这一部份内容的教学文章却又很少见,所以特别组织了这一个《Excel函数应用》系列,希望能够对Excel进阶者有所帮助。《Excel函数应用》系列,将每周更新,逐步系统的介绍Excel各类函数及其应用,敬请关注!

学习Excel函数,我们还是从“数学与三角函数”开始。毕竟这是我们非常熟悉的函数,这些正弦函数、余弦函数、取整函数等等从中学开始,就一直陪伴着我们。

首先,让我们一起看看Excel提供了哪些数学和三角函数。笔者在这里以列表的形式列出Excel提供的所有数学和三角函数,详细请看附注的表格。

从表中我们不难发现,Excel提供的数学和三角函数已基本囊括了我们通常所用得到的各种数学公式与三角函数。这些函数的详细用法,笔者不在这里一一赘述,下面从应用的角度为大家演示一下这些函数的使用方法。

一、与求和有关的函数的应用

SUM函数是Excel中使用最多的函数,利用它进行求和运算可以忽略存有文本、空格等数据的单元格,语法简单、使用方便。相信这也是大家最先学会使用的Excel函数之一。但是实际上,Excel所提供的求和函数不仅仅只有SUM一种,还包括SUBTOTAL、SUM、SUMIF、SUMPRODUCT、SUMSQ、SUMX2MY2、SUMX2PY2、SUMXMY2几种函数。

这里笔者将以某单位工资表为例重点介绍SUM(计算一组参数之和)、SUMIF(对满足某一条件的单元格区域求和)的使用。(说明:为力求简单,示例中忽略税金的计算。)

图1 函数求和

SUM

以最常见的工资表(如上图)为例,它的特点是需要对行或列内的若

干单元格求和。

比如,求该单位2001年5月的实际发放工资总额,就可以在H13中输

入公式:

=SUM(H3:H12)

2、区域求和

区域求和常用于对一张工作表中的所有数据求总计。此时你可以让单元格指针停留在存放结果的单元格,然后在Excel编辑栏输入公式"=SUM()",用鼠标在括号中间单击,最后拖过需要求和的所有单元格。若这些单元格是不连续的,可以按住Ctrl键分别拖过它们。对于需要减去的单元格,则可以按住Ctrl键逐个选中它们,然后用手工在公式引用的单元格前加上负号。当然你也可以用公式选项板完成上述工作,不过对于SUM函数来说手工还是来的快一些。比如,H13的公式还可以写成:

=SUM(D3:D12,F3:F12)-SUM(G3:G12)

3、注意

SUM函数中的参数,即被求和的单元格或单元格区域不能超过30个。换句话说,SUM函数括号中出现的分隔符(逗号)不能多于29个,否则Excel就会提示参数太多。对需要参与求和的某个常数,可用"=SUM(单元格区域,常数)"的形式直接引用,一般不必绝对引

用存放该常数的单元格。

SUMIF

SUMIF函数可对满足某一条件的单元格区域求和,该条件可以是数值、文本或表达式,可以应用在人事、工资和成绩统计中。

仍以上图为例,在工资表中需要分别计算各个科室的工资发放情况。

要计算销售部2001年5月加班费情况。则在F15种输入公式为

=SUMIF($C$3:$C$12,"销售部",$F$3:$F$12)

其中"$C$3:$C$12"为提供逻辑判断依据的单元格区域,"销售部"为判断条件即只统计$C$3:$C$12区域中部门为"销售部"的单元格,$F$3:$F$12为实际求和的单元格区域。

二、与函数图像有关的函数应用

我想大家一定还记得我们在学中学数学时,常常需要画各种函数图像。那个时候是用坐标纸一点点描绘,常常因为计算的疏忽,描不出平滑的函数曲线。现在,我们已经知道Excel几乎囊括了我们需要的各种数学和三角函数,那是否可以利用Excel函数与Excel图表功能描绘函数图像呢?当然可以。

这里,笔者以正弦函数和余弦函数为例说明函数图像的描绘方法。

图2 函数图像绘制

1、录入数据--如图所示,首先在表中录入数据,自B1至N1的单元格以30度递增的方式录入从0至360的数字,共13个数字。

2、求函数值--在第2行和第三行分别输入SIN和COS函数,这里需要注意的是:由于SIN 等三角函数在Excel的定义是要弧度值,因此必须先将角度值转为弧度值。具体公式写法为(以D2为例):=SIN(D1*PI()/180)

3、选择图像类型--首先选中制作函数图像所需要的表中数据,利用Excel工具栏上的图表向导按钮(也可利用"插入"/"图表"),在"图表类型"中选择"XY散点图",再在右侧的"子图表类型"中选择"无数据点平滑线散点图",单击[下一步],出现"图表数据源"窗口,不作任何操作,直接单击[下一步]。

4、图表选项操作--图表选项操作是制作函数曲线图的重要步骤,在"图表选项"窗口中进行(如图3),依次进行操作的项目有:

标题--为图表取标题,本例中取名为"正弦和余弦函数图像";为横轴和纵轴取标题。

坐标轴--可以不做任何操作;

网格线--可以做出类似坐标纸上网格,也可以取消网格线;

图例--本例选择图例放在图像右边,这个可随具体情况选择;

数据标志--本例未将数据标志在图像上,主要原因是影响美观。如果有特殊要求例外。5、完成图像--操作结束后单击[完成],一幅图像就插入Excel的工作区了。

6、编辑图像--图像生成后,字体、图像大小、位置都不一定合适。可选择相应的选项进行修改。所有这些操作可以先用鼠标选中相关部分,再单击右键弹出快捷菜单,通过快捷菜单中的有关项目即可进行操作。

至此,一幅正弦和余弦函数图像制作完成。用同样的方法,还可以制作二次曲线、对数图像等等。

三、常见数学函数使用技巧--四舍五入

在实际工作的数学运算中,特别是财务计算中常常遇到四舍五入的问题。虽然,excel的单元格格式中允许你定义小数位数,但是在实际操作中,我们发现,其实数字本身并没有真正的四舍五入,只是显示结果似乎四舍五入了。如果采用这种四舍五入方法的话,在财务运算中常常会出现几分钱的误差,而这是财务运算不允许的。那是否有简单可行的方法来进行真正的四舍五入呢?其实,Excel已经提供这方面的函数了,这就是ROUND函数,它可以返回某个数字按指定位数舍入后的数字。

在Excel提供的"数学与三角函数"中提供了一个名为ROUND(number,num_digits)的函数,它的功能就是根据指定的位数,将数字四舍五入。这个函数有两个参数,分别是number和num_digits。其中number就是将要进行四舍五入的数字;num_digits则是希望得到的数字的小数点后的位数。如图3所示:

单元格B2中为初始数据0.123456,B3的初始数据为0.234567,将要对它们进行四舍五入。

在单元格C2中输入"=ROUND(B2,2)",小数点后保留两位有效数字,得到0.12、0.23。在单元格D2中输入"=ROUND(B2,4)",则小数点保留四位有效数字,得到0.1235、0.2346。

图3 对数字进行四舍五入

对于数字进行四舍五入,还可以使用INT(取整函数),但由于这个函数的定义是返回实数舍入后的整数值。因此,用INT函数进行四舍五入还是需要一些技巧的,也就是要加上0.5,才能达到取整的目的。仍然以图3为例,如果采用INT函数,则C2公式应写成:"=INT(B2*100+0.5)/100"。

最后需要说明的是:本文所有公式均在Excel97和Excel2000中验证通过,修改其中的单元格引用和逻辑条件值,可用于相似的其他场合。

附注:Excel的数学和三角函数一览表

Excel函数应用之逻辑函数

(陆元婕2001年06月01日09:27)

编者语:Excel是办公室自动化中非常重要的一款软件,很多巨型国际企业都是依靠Excel进行数据管理。它不仅仅能够方便的处理表格和进行图形分析,其更强大的功能体现在对数据的自动处理和计算,然而很多缺少理工科背景或是对Excel强大数据处理功能不了解的人却难以进一步深入。编者以为,对Excel函数应用的不了解正是阻挡普通用户完全掌握Excel的拦路虎,然而目前这一部份内容的教学文章却又很少见,所以特别组织了这一个《Excel函数应用》系列,希望能够对Excel进阶者有所帮助。《Excel函数应用》系列,将每周更新,逐步系统的介绍Excel各类函数及其应用,敬请关注!

用来判断真假值,或者进行复合检验的Excel函数,我们称为逻辑函数。在Excel中提供了六种逻辑函数。即AND、OR、NOT、FALSE、IF、TRUE函数。

一、AND、OR、NOT函数

这三个函数都用来返回参数逻辑值。详细介绍见下:

(一)AND函数

所有参数的逻辑值为真时返回TRUE;只要一个参数的逻辑值为假即返回FALSE。简言之,就是当AND的参数全部满足某一条件时,返回结果为TRUE,否则为FALSE。

语法为AND(logical1,logical2, ...),其中Logical1, logical2, ... 表示待检测的 1 到30 个条件值,各条件值可能为TRUE,可能为FALSE。参数必须是逻辑值,或者包含逻辑值的数组或引用。举例说明:

1、在B2单元格中输入数字50,在C2中写公式=AND(B2>30,B2<60)。由于B2等于50的确大于30、小于60。所以两个条件值(logical)均为真,则返回结果为TRUE。

图1 AND函数示例1

2、如果B1-B3 单元格中的值为TRUE、FALSE、TRUE,显然三个参数并不都为真,所以在B4单元格中的公式=AND(B1:B3) 等于FALSE

图2 AND函数示例2

(二)OR函数

OR函数指在其参数组中,任何一个参数逻辑值为TRUE,即返回TRUE。它与AND函数的区别在于,AND函数要求所有函数逻辑值均为真,结果方为真。而OR函数仅需其中任何一个为真即可为真。比如,上面的示例2,如果在B4单元格中的公式写为=OR(B1:B3)则结果等于TRUE

图3 OR函数示例

NOT函数用于对参数值求反。当要确保一个值不等于某一特定值时,

可以使用NOT 函数。简言之,就是当参数值为TRUE时,NOT函数

返回的结果恰与之相反,结果为FALSE.

比如NOT(2+2=4),由于2+2的结果的确为4,该参数结果为TRUE,

由于是NOT函数,因此返回函数结果与之相反,为FALSE。

二、TRUE、FALSE函数

TRUE、FALSE函数用来返回参数的逻辑值,由于可以直接在单元格或公式中键入值TRUE 或者FALSE。因此这两个函数通常可以不使用。

三、IF函数

(一)IF函数说明

IF函数用于执行真假值判断后,根据逻辑测试的真假值返回不同的结果,因此If函数也称之为条件函数。它的应用很广泛,可以使用函数IF 对数值和公式进行条件检测。

它的语法为IF(logical_test,value_if_true,value_if_false)。其中Logical_test表示计算结果为TRUE 或FALSE 的任意值或表达式。本参数可使用任何比较运算符。

Value_if_true显示在logical_test 为TRUE 时返回的值,V alue_if_true 也可以是其他公式。Value_if_false logical_test 为FALSE 时返回的值。V alue_if_false 也可以是其他公式。

简言之,如果第一个参数logical_test返回的结果为真的话,则执行第二个参数Value_if_true 的结果,否则执行第三个参数Value_if_false的结果。IF函数可以嵌套七层,用value_if_false 及value_if_true 参数可以构造复杂的检测条件。

Excel 还提供了可根据某一条件来分析数据的其他函数。例如,如果要计算单元格区域中某个文本串或数字出现的次数,则可使用COUNTIF 工作表函数。如果要根据单元格区域中的某一文本串或数字求和,则可使用SUMIF 工作表函数。

(二)IF函数应用

1、输出带有公式的空白表单

图5 人事分析表1

以图中所示的人事状况分析表为例,由于各部门关于人员的组成情况的数据尚未填写,在总计栏(以单元格G5为例)公式为:

=SUM(C5:F5)

我们看到计算为0的结果。如果这样的表格打印出来就页面的美观来看显示是不令人满意的。是否有办法去掉总计栏中的0呢?你可能会说,不写公式不就行了。当然这是一个办法,但是,如果我们利用了IF函数的话,也可以在写公式的情况下,同样不显示这些0。如何实现呢?只需将总计栏中的公式(仅以单元格G5为例)改写成:

=IF(SUM(C5:F5),SUM(C5:F5),"")

通俗的解释就是:如果SUM(C5:F5)不等于零,则在单元格中显示SUM(C5:F5)的结果,否则显示字符串。

几点说明:

(1)SUM(C5:F5)不等于零的正规写法是SUM(C5:F5)<>0,在EXCEL中可以省略<>0;

(2)""表示字符串的内容为空,因此执行的结果是在单元格中不显示任何字符。

图4

2、不同的条件返回不同的结果

如果对上述例子有了很好的理解后,我们就很容易将IF函数应用到更广泛的领域。比如,在成绩表中根据不同的成绩区分合格与不合格。现在我们就以某班级的英语成绩为例具体说明用法。

图6

某班级的成绩如图6所示,为了做出最终的综合评定,我们设定按照平均分判断该学生成绩是否合格的规则。如果各科平均分超过60分则认为是合格的,否则记作不合格。

根据这一规则,我们在综合评定中写公式(以单元格B12为例):

=IF(B11>60,"合格","不合格")

语法解释为,如果单元格B11的值大于60,则执行第二个参数即在单元格B12中显示合格字样,否则执行第三个参数即在单元格B12中显示不合格字样。

在综合评定栏中可以看到由于C列的同学各科平均分为54分,综合评定为不合格。其余均为合格。

3、多层嵌套函数的应用

在上述的例子中,我们只是将成绩简单区分为合格与不合格,在实际应用中,成绩通常是有多个等级的,比如优、良、中、及格、不及格等。有办法一次性区分吗?可以使用多层嵌套

的办法来实现。仍以上例为例,我们设定综合评定的规则为当各科平均分超过90时,评定为优秀。如图7所示。

图7

说明:为了解释起来比较方便,我们在这里仅做两重嵌套的示例,您可以按照实际情况进行更多重的嵌套,但请注意Excel的IF函数最多允许七重嵌套。

根据这一规则,我们在综合评定中写公式(以单元格F12为例):

=IF(F11>60,IF(AND(F11>90),"优秀","合格"),"不合格")

语法解释为,如果单元格F11的值大于60,则执行第二个参数,在这里为嵌套函数,继续判断单元格F11的值是否大于90(为了让大家体会一下AND函数的应用,写成AND(F11>90),实际上可以仅写F11>90),如果满足在单元格F12中显示优秀字样,不满足显示合格字样,如果F11的值以上条件都不满足,则执行第三个参数即在单元格F12中显示不合格字样。

在综合评定栏中可以看到由于F列的同学各科平均分为92分,综合评定为优秀。

(三)根据条件计算值

在了解了IF函数的使用方法后,我们再来看看与之类似的Excel提供的可根据某一条件来分析数据的其他函数。例如,如果要计算单元格区域中某个文本串或数字出现的次数,则可使用COUNTIF 工作表函数。如果要根据单元格区域中的某一文本串或数字求和,则可使用SUMIF 工作表函数。关于SUMIF函数在数学与三角函数中以做了较为详细的介绍。这里重点介绍COUNTIF的应用。

COUNTIF可以用来计算给定区域内满足特定条件的单元格的数目。比如在成绩表中计算每位学生取得优秀成绩的课程数。在工资表中求出所有基本工资在2000元以上的员工数。

语法形式为COUNTIF(range,criteria)。其中Range为需要计算其中满足条件的单元格数目的单元格区域。Criteria确定哪些单元格将被计算在内的条件,其形式可以为数字、表达式或文本。例如,条件可以表示为32、"32"、">32"、"apples"。

1、成绩表

这里仍以上述成绩表的例子说明一些应用方法。我们需要计算的是:每位学生取得优秀成绩的课程数。规则为成绩大于90分记做优秀。如图8所示

图8

根据这一规则,我们在优秀门数中写公式(以单元格B13为例):

=COUNTIF(B4:B10,">90")

语法解释为,计算B4到B10这个范围,即jarry的各科成绩中有多少个数值大于90的单元格。

在优秀门数栏中可以看到jarry的优秀门数为两门。其他人也可以依次看到。

2、销售业绩表

销售业绩表可能是综合运用IF、SUMIF、COUNTIF非常典型的示例。比如,可能希望计算销售人员的订单数,然后汇总每个销售人员的销售额,并且根据总发货量决定每次销售应获得的奖金。

原始数据表如图9所示(原始数据是以流水单形式列出的,即按订单号排列)

图9 原始数据表

按销售人员汇总表如图10所示

图10 销售人员汇总表

如图10所示的表完全是利用函数计算的方法自动汇总的数据。首先建立一个按照销售人员汇总的表单样式,如图所示。然后分别计算订单数、订单总额、销售奖金。

(1)订单数--用COUNTIF计算销售人员的订单数。

以销售人员ANNIE的订单数公式为例。公式:

=COUNTIF($C$2:$C$13,A17)

语法解释为计算单元格A17(即销售人员ANNIE)在"销售人员"清单$C$2:$C$13的范围内(即

图9所示的原始数据表)出现的次数。

这个出现的次数即可认为是该销售人员ANNIE的订单数。

(2)订单总额--用SUMIF汇总每个销售人员的销售额。

以销售人员ANNIE的订单总额公式为例。公式:

=SUMIF($C$2:$C$13,A17,$B$2:$B$13)

此公式在"销售人员"清单$C$2:$C$13中检查单元格A17 中的文本(即销售人员ANNIE),然后计算"订单金额"列($B$2:$B$13)中相应量的和。

这个相应量的和就是销售人员ANNIE的订单总额。

(3)销售奖金--用IF根据订单总额决定每次销售应获得的奖金。

假定公司的销售奖金规则为当订单总额超过5万元时,奖励幅度为百分之十五,否则为百分之十。根据这一规则仍以销售人员ANNIE为例说明。公式为:

=IF(C17<50000,10%,15%)*C17

如果订单总额小于50000则奖金为10%;如果订单总额大于等于50000,则奖金为15%。

至此,我们已完全了解了EXCEL函数的逻辑函数,相信大家在实际工作中会想出更多更有用的运用。

(责任编辑Ray hotray@https://www.wendangku.net/doc/20320287.html,)

一、文本函数

(一)大小写转换

LOWER--将一个文字串中的所有大写字母转换为小写字母。

UPPER--将文本转换成大写形式。

PROPER--将文字串的首字母及任何非字母字符之后的首字母转换成大写。将其余的字母转换成小写。

这三种函数的基本语法形式均为函数名(text)。示例说明:

已有字符串为:pLease ComE Here! 可以看到由于输入的不规范,这句话大小写乱用了。

通过以上三个函数可以将文本转换显示样式,使得文本变得规范。参见图1

Lower(pLease ComE Here!)= please come here!

upper(pLease ComE Here!)= PLEASE COME HERE!

proper(pLease ComE Here!)= Please Come Here!

图1

(二)取出字符串中的部分字符

具体语法格式为

LEFT函数:LEFT(text,num_chars)其中Text是包含要提取字符的文本

串。Num_chars指定要由LEFT 所提取的字符数。

MID函数:MID(text,start_num,num_chars)其中Text是包含要提取字符

的文本串。Start_num是文本中要提取的第一个字符的位置。

RIGHT函数:RIGHT(text,num_chars)其中Text是包含要提取字符的文本串。Num_chars指定希望RIGHT 提取的字符数。

比如,从字符串"This is an apple."分别取出字符"This"、"apple"、"is"的具体函数写法为。

LEFT("This is an apple",4)=This

RIGHT("This is an apple",5)=apple

MID("This is an apple",6,2)=is

图2

(三)去除字符串的空白

在字符串形态中,空白也是一个有效的字符,但是如果字符串中出现空白字符时,容易在判断或对比数据是发生错误,在Excel中您可以使用Trim函数清除字符串中的空白。

语法形式为:TRIM(text)其中Text为需要清除其中空格的文本。

需要注意的是,Trim函数不会清除单词之间的单个空格,如果连这部分空格都需清除的话,建议使用替换功能。比如,从字符串"My name is Mary"中清除空格的函数写法为:TRIM("My name is Mary")=My name is Mary 参见图3

图3

(四)字符串的比较

在数据表中经常会比对不同的字符串,此时您可以使用EXACT函数来比较两个字符串是否相同。该函数测试两个字符串是否完全相同。如果它们完全相同,则返回TRUE;否则,返回FALSE。函数EXACT 能区分大小写,但忽略格式上的差异。利用函数EXACT 可

以测试输入文档内的文字。语法形式为:EXACT(text1,text2)Text1为待比较的第一个字符串。Text2为待比较的第二个字符串。举例说明:参见图4

EXACT("China","china")=False

图4

二、日期与时间函数

在数据表的处理过程中,日期与时间的函数是相当重要的处理依据。而Excel在这方面也提供了相当丰富的函数供大家使用。

(一)取出当前系统时间/日期信息

用于取出当前系统时间/日期信息的函数主要有NOW、TODAY。

语法形式均为函数名()。

(二)取得日期/时间的部分字段值

如果需要单独的年份、月份、日数或小时的数据时,可以使用HOUR、DAY、MONTH、YEAR 函数直接从日期/时间中取出需要的数据。具体示例参看图5。

比如,需要返回2001-5-30 12:30 PM的年份、月份、日数及小时数,可以分别采用相应函数实现。

YEAR(E5)=2001

MONTH(E5)=5

DAY(E5)=30

HOUR(E5)=12

相关文档
相关文档 最新文档