EXCEL中度与度分秒换算
一、度分秒值换算为度
首先要将单位符号都去掉,形成 1112233 的形式,分秒小于十的要在其前补0,必须如此,不然无法判断分与秒的位置。
假设原始数据在A列,第一个数据在A2单元格。
在你需要放入转换结果的一个单元格内(最好是与A2同一行,这样有大量原始数据要转换时,直接下拉就可以转换所有数据),输入:
=value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),1,3))+value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),4,2))/60+value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),6,2))/3600
回车即可。
下面解释转换方法和函数意义。
int函数与round函数以 1112233 为例。
算法是111+(22/60)+(33/3600),即把分、秒都算成度后相加。
MID:意为选择指定的字符,具体写法为MID(数据,顺位,字符数),先指定1-3位(度位),再指定4-5位(分位)/60,再指定6-7位(秒位)/3600。
value:意为转换成为数值,这样才能进行运算。
关键问题在于,度有可能是2位数,如果这样整个数就是6位,上例算式中的
IF(LEN(A2)=6,CONCATENATE("0",A2),A2)
就是处理这样的问题的。意思为如果整个是6位数,就在其前补个0,若不是6位,就直接用原来的数值(呵呵,在中国及周边没有6位和7位以外的经纬度,现在这个算法适用于6位和7位的经纬度)。
IF:条件函数,用法:IF(logical_test,value_if_true,value_if_false),其中logical_test为判断条件,在本例中为LEN(A2)=6,满足条件执行value_if_true,不满足则执行value_if_false。
LEN:为返回字符数的函数。
CONCATENATE:为合并字符函数,写法为:CONCATENATE(text1,text2,...),如要直接使用文本字符,就在其上加英文引号。
二、度转换为度分秒
假设原始数据在A列,第一个数据在A2单元格。
在你需要放入转换结果的一个单元格内(最好是与A2同一行,这样有大量原始数据要转换时,直接下拉就可以转换所有数据),输入:
=CONCATENATE(INT(A2),IF(INT((A2-INT(A2))*60)<10,CONCATENATE("0",INT((A2-INT(A2))*60)),INT((A2-INT(A2))*60)),IF(ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)<10,CONCATENATE("0",ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)),ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)))
回车即可。
解释如下:
以112.1234567度为例。
使用 CONCATENATE 文本组合函数,将分别计算出的度、分、秒组合在一起(其用法参照前一帖)。
本例中的INT(A2),取的是112,即度值;IF(INT((A2-INT(A2))*60)<10,CONCATENATE("0",INT((A2-INT(A2))*60)),INT((A2-INT(A2))*60))取的是分值;IF(ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)<10,CONCATENATE("0",ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)),ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)),取的是秒值。
比较关键的一点是,分、秒在计算完后可能会小于10,这样就会出现本应为7位的度分秒值成了6位或5位,因此在计算分和秒时,加了一个条件语句,即若其值小于10,就在前面补个0。INT((A2-INT(A2))*60)<10是判断分值是否小于10;ROUND(((A2-INT(A2))*60-INT((A2-INT(A2))*60))*60,0)<10是判断秒值是否小于10。
INT 是取整函数,可对任意实数向下取整为最接近的整数,向下的意思为往小的方向,如 =INT(3.38)返回3,=INT(-3.38)返回-4。该函数与 TRUNC 函数都有取整的功能,TRUNC 函数可以按需要截取数字的小数部分,而 INT 函数则将数字向下舍入到最接近的整数。INT 和TRUNC 函数在处理负数时不同点:TRUNC(-4.3,0)返回-4,而INT(-4.3)返回-5。
ROUND 为四舍五入函数,本例中秒值不再留有小数,因此将其四舍五入了,这就是计算分值的时候用 INT 函数,而计算秒值的时候用 ROUND 函数的原因。该函数的写法为 ROUND(number,num_digits),其中的number是待处理的数值(也可是表达式的结果),num_digits是保留的小数位数。本例中的小数保留
三、求度分秒范围转度的中心坐标值
这里只算经度或纬度的一项,要算另一项,只需改动原始数据位置,重复操作即可。
假设原始数据在A列和B列,B列数据比A列数据大。第一个数据项在A2和B2。
每个值的算法原理是:
将经纬度都设立成7位,将度、分、秒都折算成度,转换方法参照前帖。用度来计算的好处是不会产生度分秒的进位问题,而同时度也可在上图时使用,若想将度转换成度分秒,就参照本人的前一帖。
结果的算法是(B2-A2)/2+A2。
在你需要放入转换结果的一个单元格内(最好是与A2、B2的同一行,这样有大量原始数据要转换时,直接下拉就可以转换所有数据),输入:
=((value(MID(IF(LEN(B2)=6,CONCATENATE("0",B2),B2),1,3))+value(MID(IF(LEN(B2)=6,CONCATENATE("0",B2),B2),4,2))/60+value(MID(IF(LEN(B2)=6,CONCATENATE("0",B2),A2),6,2))/3600)-(value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),1,3))+value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),4,2))/60+value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),6,2))/3600))/2+value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),1,3))+value(MID(IF(LEN(A2)=6,CONCATENATE("0",A2),A2),4,2))/60+value(MID(IF
(LEN(A2)=6,CONCATENATE("0",A2),A2),6,2))/3600
回车即可。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论