博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
度分秒和度的转换
阅读量:6981 次
发布时间:2019-06-27

本文共 3324 字,大约阅读时间需要 11 分钟。

输入的经纬度是 118.8000745,转换为度分秒的格式
计算:度 就是 118度; 
          分 用小数部分0.8000745 * 60 = 48.00447,分就是48分;
          秒 用分的小数部分 0.00447 * 60 = 0.2682 秒

写了个QAngle类,头文件qangle.h

1 #ifndef QANGLE_H 2 #define QANGLE_H 3  4 #include 
5 6 class QAngle : public QObject 7 { 8 Q_OBJECT 9 public:10 QAngle(QObject *parent);11 QAngle(double angle);12 QAngle(int nDegree, int nMinute,int nSecond);13 QString getDDMMSS();14 ~QAngle();15 private:16 double dAngle;//dAngle——角度, 单位度(°)17 int nDegree;18 int nMinute;19 int nSecond;20 void ConvertToAngle();21 void ConvertToddmmss( int nPrecision);22 };23 24 #endif // QANGLE_H

实现文件qangle.cpp

1 #include "qangle.h"  2   3 QAngle::QAngle(QObject *parent)  4     : QObject(parent)  5 {  6   7 }  8 QAngle::QAngle(double angle)  9 { 10     dAngle=angle; 11     ConvertToddmmss(3); 12 } 13 QAngle::QAngle(int _Degree,    int _Minute,int _Second) 14 { 15     nDegree=_Degree; 16     nMinute=_Minute; 17     nSecond=_Second; 18     ConvertToAngle(); 19 } 20 void QAngle::ConvertToAngle() 21 { 22     dAngle=nDegree+nMinute/60+nSecond/3600; 23 } 24 QString QAngle::getDDMMSS() 25 { 26     QString strDDMMSS; 27     strDDMMSS.append(QString::number(nDegree)); 28     strDDMMSS.append(QString::fromLocal8Bit("°")); 29     strDDMMSS.append(QString::number(nMinute)); 30     strDDMMSS.append(tr("'")); 31     strDDMMSS.append(QString::number(nSecond)); 32     strDDMMSS.append(tr("\"")); 33     return strDDMMSS; 34 } 35 //nPrecision——精度, 1:度、2:分、3:秒 36 void QAngle::ConvertToddmmss(int nPrecision) 37 { 38     if (1 == nPrecision)    // 度 39     { 40         int nDegree = int(dAngle); 41         if (fabs(dAngle - nDegree) > 0.5) 42         { 43             // 四舍五入 44             nDegree += 1; 45         } 46         if (nDegree > 360) 47         { 48             nDegree -= 360; 49         } 50         //strDimText.Format(_T("%d°"), nDegree); 51     } 52     else if (2 == nPrecision) // 分 53     { 54         int nDegree = int(dAngle); 55         int nMinute = int((dAngle - nDegree) * 60); 56         if (fabs((dAngle - nDegree) * 60 - nMinute) > 0.5) 57         { 58             // 四舍五入 59             nMinute += 1; 60         } 61         if (nMinute >= 60) 62         { 63             nMinute = 0; 64             nDegree += 1; 65         } 66         if (nDegree > 360) 67         { 68             nDegree -= 360; 69         } 70         //strDimText.Format(_T("%d°%d'"), nDegree, nMinute); 71     } 72     else if (3 == nPrecision)    // 秒 73     { 74         nDegree = int(dAngle); 75         nMinute = int((dAngle - nDegree) * 60); 76         nSecond = int(((dAngle - nDegree) * 60 - nMinute) * 60); 77  78         if (fabs(((dAngle - nDegree) * 60 - nMinute) * 60 - nSecond) > 0.5) 79         { 80             // 四舍五入 81             nSecond += 1; 82         } 83         if (nSecond >= 60) 84         { 85             nSecond = 0; 86             nMinute += 1; 87         } 88         if (nMinute >= 60) 89         { 90             nMinute = 0; 91             nDegree += 1; 92         } 93         if (nDegree > 360) 94         { 95             nDegree -= 360; 96         } 97         //strDimText.Format(_T("%d°%d'%d\""), nDegree, nMinute, nSecond); 98     }     99 }100 QAngle::~QAngle()101 {102 103 }

 

转载于:https://www.cnblogs.com/yhlx125/p/3139072.html

你可能感兴趣的文章
super的用法(带了解)
查看>>
NLP(Natural Language Processing)
查看>>
Flask上下文管理源码分析
查看>>
asp.net webapi 序列化为xml 时实体属性增加<![CDATA[]]>防止特殊字符
查看>>
注册表----修改Win7登录界面
查看>>
UNIX/Linux系统管理技术手册(3)----bash 数组和算术运算
查看>>
Socket-实例
查看>>
LINQ之路19:LINQ to XML之X-DOM更新、和Value属性交互
查看>>
个人开发者即时到账收款方案 BufPay.com
查看>>
jQuery事件处理一瞥
查看>>
单据自动转换并审核的方法示例
查看>>
转载 load-on-startup的用法
查看>>
OCM_第十二天课程:Section6 —》数据库性能调优_ 资源管理器/执行计划
查看>>
iOS--优秀博客记录
查看>>
笔记之远程桌面服务(RDS)
查看>>
怎样操作vue.js使用3DES加密
查看>>
6.2 sql安全性
查看>>
js实现点击<li>标签弹出其索引值
查看>>
Sublime Text2.0.2注册码
查看>>
第三次作业---读《构造之法》1-5章有感
查看>>