cast(int) getting an unexpected number
    Lars T. Kyllingstad 
    public at kyllingen.NOSPAMnet
       
    Wed Nov  4 23:13:19 PST 2009
    
    
  
Joel Christensen wrote:
>> To be safe, whenever converting to int, always add a small epsilon.  I 
>> think you can use float.epsilon, but I don't have any experience with 
>> whether that is always reasonable.
>>
>> -Steve
> 
> Thanks every one for the replies.
> 
> I still have problems. How do I use epsilon? 'real' helps in my example 
> program but not in my money program. I think there's a function out 
> there that does dollars and cents (eg. .89 -> 89c and 1.00 -> $1), but 
> I'm interested how to solve this problem.
If the values you are working with are monetary, I don't think it makes 
sense to convert to int by casting, since casting always rounds towards 
zero. Instead you should use the std.math.lround() function, which 
rounds in a more natural way (towards the nearest integer, away from 
zero if the fractional part is exactly 0.5).
To answer your question, this is how you would get and use the epsilon 
value in your example:
   cast(int)(f*100f + float.epsilon);
-Lars
    
    
More information about the Digitalmars-d-learn
mailing list