Ali Ãehreli Wrote: > jicman wrote: > > Greetings and salutations! > > > > Will someone be so kind as to explain why this is happening? > > > > ---- > > import std.stdio; > > import std.conv; > > > > void main() > > { > > char[][] strRealVals = > > [ > > "14539.34","1230.00","361.62","1613.10","","","0.00" > > ]; > > real rTotal = 0; > > foreach (char[] s; strRealVals) > > { > > writefln("Real value is: " ~ s); > > real r = 0.00; > > if (s != "") > > r = std.conv.toReal(s); > > rTotal += r; > > } > > writefln(std.string.toString(rTotal)); > > writefln(rTotal); > > } > > ---- > > > > When I run this program, I get this: > > 16:51:35.54>realtest > > Real value is: 14539.34 > > Real value is: 1230.00 > > Real value is: 361.62 > > Real value is: 1613.10 > > Real value is: > > Real value is: > > Real value is: 0.00 > > 17744.1 > > 17744.1 > > > > ---- > > > > If I add these numbers, the outcome should be 17744.06. Any ideas? I am > > using Digital Mars D Compiler v1.046. > > > > thanks, > > > > jos� > > > > The default format string for floating point values is 6 decimal digits > of precision (the digits before and after the decimal point). writefln > is rounding the value up. > > Try for example "%.18f" for 'real'. This does it automatically: > > import std.stdio; > import std.string; > > void main() > { > auto theValue = 17744.06L; > > writefln("%s has %s decimal digits of precision", > typeof(theValue).stringof, theValue.dig); > > auto formatString = format("%%.%sf", theValue.dig); > writefln(formatString, theValue); > } >
thanks. That worked. jic