1

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();
}
Lightness Races in Orbit
  • 378,754
  • 76
  • 643
  • 1,055
Victor
  • 13,914
  • 19
  • 78
  • 147

4 Answers4

1
sec = Math::Round(static_cast<int>(sec_all) % 60, 3);
spin_eight
  • 3,925
  • 10
  • 39
  • 61
1

You cannot use modulo on doubles. Modulo on doubles:

 int result = static_cast<int>( a / b );
 return a - static_cast<double>( result ) * b;
ISTB
  • 1,799
  • 3
  • 22
  • 31
1

You could use a string stream to construct output, like this:

std::wostringstream output;
output << deg << L"º " << min << L"' " << sec << L"\"";

return output.str();
Angew is no longer proud of SO
  • 167,307
  • 17
  • 350
  • 455
0

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.

Strike
  • 248
  • 1
  • 8