On Sunday, February 25, 2018 06:22:03 psychoticRabbit via Digitalmars-d- learn wrote: > On Sunday, 25 February 2018 at 05:40:19 UTC, Jonathan M Davis > > wrote: > > int[] intArr = iota(1, 11).array(); > > > > - Jonathan M Davis > > thanks! > > oh man. It's so easy to do stuff in D ;-) > > But this leads me to a new problem now. > > When I run my code below, I get ints printed instead of doubles?? > > --------------------- > module test; > > import std.stdio : writeln; > import std.traits : isArray; > import std.array : array; > import std.range : iota; > > > void main() > { > int[] intArr = iota(1, 11).array(); // 1..10 > double[] doubleArr = iota(1.0, 11.0).array(); // 1.0..10.0 > char[] charArr = iota('a', '{').array(); // a..z > > printArray(intArr); > printArray(doubleArr); // why is it printing ints instead of > doubles?? > printArray(charArr); > } > > void printArray(T)(const ref T[] a) if (isArray!(T[])) > { > foreach(t; a) > writeln(t); > } > > ---------------------------------
It's not printing ints. It's printing doubles. It's just that all of the doubles have nothing to the right of the decimal point, so they don't get printed with a decimal point. If you did something like start with 1.1, then you'd see decimal points, because there would be data to the right of the decimal point. The same thing happens if you do writeln(1.0); as opposed to something like writeln(1.3); BTW, you can just call writeln on the array directly, and then you'll get something like [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] - Jonathan M Davis