Reputation: 14632
I have the following function in C++:
std::wstring decToDeg(double input)
{
int deg, min;
double sec, sec_all, min_all;
std::wstring output;
sec_all = input * 3600;
sec = Math::Round(static_cast<int>(sec_all) % 60, 3); //code from @spin_eight answer
min_all = (sec_all - sec) / 60;
min = static_cast<int>(min_all) % 60;
deg = static_cast<int>(min_all - min) / 60;
output = deg + L"º " + min + L"' " + sec + L"\"";
return output;
}
When I try to compile I get this error:
error C2679: binary '=' : no operator found which takes a right-hand operand of type 'System::String ^' (or there is no acceptable conversion)
What can I do to correct these two errors in my function?
EDIT: solved
std::wstring decToDeg(double input)
{
int deg, min;
double sec, sec_all, min_all;
sec_all = input * 3600;
sec = Math::Round(static_cast<int>(sec_all) % 60, 3);
min_all = (sec_all - sec) / 60;
min = static_cast<int>(min_all) % 60;
deg = static_cast<int>(min_all - min) / 60;
std::wostringstream output;
output << deg << L"º " << min << L"' " << sec << L"\"";
return output.str();
}
Upvotes: 1
Views: 189
Reputation: 171177
You could use a string stream to construct output
, like this:
std::wostringstream output;
output << deg << L"º " << min << L"' " << sec << L"\"";
return output.str();
Upvotes: 1
Reputation: 248
For the first error try this:
min = (static_cast<int>(min_all) ) % 60;
This should make sure the cast will be completed first, before trying to do any other calculating.
If your other error is not an error that was caused by the first error, you may want to try using stringstream. It behaves like a normal I/O stream and is thus ideal for formatting strings.
Upvotes: 0
Reputation: 1827
You cannot use modulo on doubles. Modulo on doubles:
int result = static_cast<int>( a / b );
return a - static_cast<double>( result ) * b;
Upvotes: 1