I should add: thanks for sharing real-world info on learning and teaching Swift. I agree that it&#39;s important to consider how the language is picked up by new users. Here, what I&#39;m saying is that I think your learners have missed a much larger pedagogical point. When I teach new learners, whether it&#39;s C or Python or Swift, I introduce the notion that programming languages treat integers specially, and that any time an operation produces a fractional value in basic math, the integer math equivalent in a programming language often drops the fractional part. I find that learners who have had this introduction do not subsequently struggle with float-to-int casting in C, for example.<br><br><br><div class="gmail_quote"><div dir="ltr">On Mon, May 22, 2017 at 09:09 Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com">xiaodi.wu@gmail.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Let&#39;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)`.<br><div class="gmail_quote"><div dir="ltr">On Mon, May 22, 2017 at 08:06 Rudolf Adamkovič &lt;<a href="mailto:salutis@me.com" target="_blank">salutis@me.com</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
&gt; On 22 May 2017, at 14:18, Xiaodi Wu &lt;<a href="mailto:xiaodi.wu@gmail.com" target="_blank">xiaodi.wu@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt; What are the &quot;subtle bugs all over the place&quot; that you observe, and what did those users expect to happen?<br>
<br>
They pretty much universally expect the value to be rounded. When this happens, I tell them about this language called C (… insert long story here ...) and we replace &quot;Int(foo)&quot; with &quot;foo.rounded()”. We write a unit test and move on. So far, so good. However, two weeks later, they do it again. And again. If the initializer said “truncating” or something along those lines, I’m sure they wouldn’t pick that one. They are all smart people, it’s just that there’s absolutely no “visible clue” and they don’t expect this to be the default behavior.<br>
<br>
P.S. I haven’t followed the “integer protocols” debate and had no idea that “this issue is settled” and that it &quot;cannot go back”. Also, I have no time nor interest to &quot;bikeshed endlessly”. I just wanted to share real-world experience/observation with smart people in here (like you) to improve the language going forward.<br>
<br>
Thank you!<br>
<br>
R+<br>
<br>
</blockquote></div></blockquote></div>