Ai có thể hướng dẫn cho em cách viết code trong visual studio để đổi từ độ phút giây sang độ % được ko ?
![]()
![]()
![]()
Sao ko có ai reply em hết vậy ?
Em có đoạn code sau : (em sử dụng chương trình Microsoft Visual Studio 2005 - em xin lỗi nếu như em post bài nhầm box )
Em muốn đổi từ độ phút giây ---> độ phần trăm :
Ví dụ : 1045.8055 (độ phút giây) ---> 10.76345 (độ phần trăm) - (10+45.8055/60).
Visual C++ Code:
//Latitude 1045.8055 ddmm.mmmm CString dd = Latitude.Left(2); CString mm = Latitude.Right(Latitude.GetLength()-2); double f = _wtof((const TCHAR *)(LPCTSTR)(mm))/60; Latitude.Format(_T("%s%f"),dd,f); //Longtude 10640.0565 dddmm.mmmm dd = Longitude.Left(3); mm = Longitude.Right(Latitude.GetLength()-3); f = _wtof((const TCHAR *)(LPCTSTR)(mm))/60; Longitude.Format(_T("%s%f"),dd,f);
Đoạn code trên của em bị lỗi .Các bác có thể check lỗi dùm em được không ạ?![]()
![]()
![]()
Em xin cám ơn.
@admin: vì bài kia em ko sửa tiêu đề được nên em post bài mới này.Có gì mong các mod và admin thông cảm.
Đã được chỉnh sửa lần cuối bởi Tab : 16-05-2008 lúc 09:09 PM. Lý do: Đặt lại thẻ CODE
Ai có thể hướng dẫn cho em cách viết code trong visual studio để đổi từ độ phút giây sang độ % được ko ?
![]()
![]()
![]()
Sao ko có ai reply em hết vậy ?
Ko hiểu ý của bạn là gì hết cả? Bạn có thể chi tiết hơn không?
Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó.Email: kevin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
Phone: 0972 89 7667
Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp hoặc bị sự thiếu kỷ luật làm tiêu tan sự nghiệp.
@Dream: dạ .
Ý của em là :
1. Em nhận được 2 giá trị Latitude và Longitude từ cổng COM .
Em lưu 2 giá trị đó vào 2 biến là gps.Latitude và gps.Longitude .Visual C++ Code:
UpdateData(1); if (comm.get_CommEvent()==2){ VARIANT data = comm.get_Input(); tem += (CString)data.bstrVal; if (( tem.Replace(_T("\r\n"),_T("")))) { gps.nmeainfo = tem; gps.parse(); sreceive += tem; tem = ""; dispUTC.SetWindowTextW ( (gps.UTCTime)); dispLong.SetWindowTextW((gps.Longitude)); dispLat.SetWindowTextW((gps.Latitude)); //xuat ra file LAT LONG CStdioFile fff(_T("toado.txt"),CFile::modeCreate | CFile::modeWrite | CFile::typeText ); fff.WriteString(gps.Latitude); fff.WriteString(_T(",")); fff.WriteString(gps.Longitude); fff.Close(); } }; UpdateData(false);
Giá trị format (kiểu mặc định) ban đầu của nó là :
- ddmm.mmmm với Latitude (Ví dụ : 3723.2475 - 37 độ 23.2475 phút)
- dddmm.mmmm với Longitude (Ví dụ : 12158.3416 - 121 độ 23.2475 phút )
Do nhu cầu của thực tế ,em muốn đổi từ độ phút giây (giá trị như bên trên) sang độ %.
Công thức toán học để đổi là :
3723.2475 (độ phút giây) = 37 (degree) + 23.2475 (minute)/60 = độ % .
Và lưu giá trị mới của Latitude và Longitude(giá trị sau khi đã đổi qua độ %) vào 1 file text.
Vì mới làm quen với visual studio nên cách xử lý việc trên em chưa biết .
Mong được các anh chị giúp đỡ .
Em xin cảm ơn.
Đã được chỉnh sửa lần cuối bởi Tab : 16-05-2008 lúc 09:10 PM. Lý do: Đặt lại thẻ code
3723.2475 (độ phút giây) = 37 (degree) + 23.2475 (minute)/60 = độ % .
Bạn dùng CString Mid( int nFirst, int nCount ) để trích xuất s1 = "37", và s2 = "23.2475" , sau đó chuyển s1 và s2 về dạng int bằng cách dùng int i1 = atoi(s1) và int i2 = atoi(s2).
Mình viết đoạn code :
Visual C++ Code:
//Latitude 3723.2475 ddmm.mmmm CString dd = Latitude.Left(1); CString mm = Latitude.Right(Latitude.GetLength()-1); double f = _wtof(Latitude.Left(1))+_wtof(Latitude.Right(Latitude.GetLength()-1))/60; Latitude.Format(_T("%s%f"),dd,f); //Longtude 12158.3416 dddmm.mmmm dd = Longitude.Left(2); mm = Longitude.Right(Latitude.GetLength()-2); f = _wtof(Latitude.Left(2))+_wtof(Latitude.Right(Latitude.GetLength()-2))/60; Longitude.Format(_T("%s%f"),dd,f);
Thì được kết quả :
Output Code:
Latitude: 11.017157 Longtitude: 1011.000286
Mà kết quả đúng phải là : Latitude = 10.763445 và Longitude = 106.667513
Ai có thể chỉ cho mình lỗi trên được ko?
@void main() : Bạn có thể nói cụ thể hơn 1 chút được không ?
Mình cám ơn bạn rất nhiều . Mong được bạn giúp đỡ .
Dạ , cái //Latitude 3723.2475 ddmm.mmmm đó chỉ là lấy ví dụ thôi bác ạ.
Còn kết quả thực nghiệm là :
1045.8055 (độ phút giây) ---> 10.76345 (độ phần trăm) - (10+45.8055/60).
1045.8055 --> kết quả trực tiếp do thiết bị nhận được
10.76345 ---> kết quả đúng khi chuyển qua độ % (kết quả mong muốn đạt được .)
Còn đây là kết quả do đoạn code của em viết :
Output Code:
Latitude: 11.017157 Longtitude: 1011.000286
Em không biết viết sai ở chỗ nào , mong được bác chỉ giáo thêm .
Cám ơn bác .
Đã được chỉnh sửa lần cuối bởi pisco : 15-05-2008 lúc 10:39 PM.
Bạn thử code này xem nhé :
Visual C++ Code:
#include <afx.h> float toFloat(CString s) { return (float) atof(s); } CString toString(float f) { CString ret; ret.Format("%f",f); return ret; } CString convertResulft(CString strResult) { CString s1 , s2 ; s1 = strResult.Mid(0,2); s2 = strResult.Mid(2); float fResult = atoi(s1) + toFloat(s2) / 60; return toString(fResult); }
@Void main(): có thể hướng dẫn mình cụ thể hơn được ko?![]()
Vì mấy thuật toán này thật sự mình chưa có rành .
Khi mình chèn thêm thư viện "afx.h" và đoạn code của bạn vào thì nó báo lỗi :
error C3861: 'toFloat': identifier not found
error C3861: 'toString': identifier not found
...