On Friday, 23 October 2020 at 13:57:41 UTC, Joseph Rushton Wakeling wrote:

In particular, if `to` just accepted any string numerical representation for conversion to int, how could the caller explicitly _exclude_ non-integer input, if that is their use-case?

So it's far better to require you, as the programmer, to make what you want unambiguous and explicitly write code that will (i) deserialize any numerical string that is acceptable to you and (ii) convert to integer.

Yes, that's the problem, and it doesn't make sense to use a statically typed language if the standard library silently introduces holes that lead to serious bugs (in this case, loss of numerical precision, which can be pretty nasty).

The solution is simple in this case, and it even leads to one less character when you're writing your program:

import std;
void main()
{
    int toInt(string s) {
        return(s.to!double.to!int);
    }

    writeln(toInt("1"));
    writeln(toInt("1.1"));
    writeln(toInt("a"));
}

Reply via email to