> On 22 May 2017, at 15:09, Xiaodi Wu via swift-evolution 
> <[email protected]> wrote:
> 
> Let's be clear: it _is_ rounded, just toward zero. It is consistent with the 
> behavior of integer division. I would guess that your students also 
> repeatedly struggle with the result that `2 / 3 == 0`? If so, they have not 
> been taught some important fundamentals of integer arithmetic. If not, then 
> it should be natural that `Int(2 / 3 as Double == Int(2 / 3 as UInt)`.

Just to add my thoughts; but while I agree that it's important developers learn 
the intricacies of Int vs. Float, I don't think this is quite the same issue as 
divisions.

If you're asking for an Int then you should have some idea that you're asking 
for a whole number only, and so that follows on to division as Ints simply 
cannot handle fractions.

However, for conversion from Float there's an expectation that some rounding 
must occur, the problem is that it's not as expected; while you or I would 
expect it to be this way with familiarity of other languages, for someone new 
to the language this isn't always going to be the case. While it's reasonable 
to expect new developers to know what an Int is, I think it's unreasonable for 
them also to remember what the default rounding strategy of an implicitly 
rounding constructor is.


For this reason I tend to agree with the principle that the Int(_:Float) 
constructor should probably be labelled more intuitively, personally I'd like 
to see:

        func init(truncating:Float) { … }
        func init(rounding:Float, _ strategy: FloatingPointRoundingRule) { … }

Here the init(truncating:) constructor is just a convenience form of 
init(rounding:) with a strategy of .towardZero, which I believe is consistent 
with the current behaviour. It's also easily swapped in anywhere that 
init(_:Float) etc. are currently used.
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to