Stripping extra decimal spaces
BlitzMax Forums/BlitzMax Beginners Area/Stripping extra decimal spaces| 
 | ||
| Hi all I made a simple salary calculator as a test to learn a bit of MaxGUI. This is a pretty basic question but I can't find an answer in the docs. How do I round a Long number to, say, two decimal places. The thing is, when I do my calculation, the result comes out like this: 206.0000000000000 Any info will be greatly appreciated! | 
| 
 | ||
| You can convert it to a string, and then remove all characters that occur N characters after the "." | 
| 
 | ||
| 
Function RoundedToDecimalPlaces:String(number:Double, places:Int)
	Local numberString:String = String(number)
	Return numberString[0..numberString.Find(".")+places+1]
End Function
 | 
| 
 | ||
| Assuming it has "." in there, otherwise it's going to return something entirely unexpected. | 
| 
 | ||
|  Assuming it has "." in there, otherwise it's going to return something entirely unexpected A double will always have a decimal point in it, won't it? | 
| 
 | ||
| At least on Mac and Windows, using the current BMX, BlitzMax's String representation of a Double always contains a '.' as far as I can tell. I couldn't find a counterexample, anyway. It is the sort of thing that could get changed between updates, though. | 
| 
 | ||
|  A double will always have a decimal point in it, won't it?   Let's hope so. | 
| 
 | ||
| you can end up with a scientific notation valid on intel and ppc computers. try this: a! = 20.0!/21808999899! Print a! | 
| 
 | ||
| Oh yeah.... you could parse the string to allow for that though. | 
| 
 | ||
| I would like to see a salary involving scientific notation. :) That having been said, I definitely stand corrected. THAT having been said, when dealing with monetary values, it's best to avoid the whole floating-point thing anyway -- you might want to consider either using arbitrary-precision arithmetic or storing monetary values as a number of cents (ie, $7.82 as 782) in order to avoid this sort of problem. | 
| 
 | ||
| Something like this? Function decround$(n!,k:Int) Local i:Int i=Int(n) If Floor(n)=n Or k=0 Return String(i) n:-i n:*10^k Local d:Int=Int(n) If n-d>.5 Then d:+1 Return String(i)+"."+String(d) End Function For k=0 To 5 Print decround(Pi,k) Next | 
| 
 | ||
| Though yes, for salaries store money as numbers of pennies and use bankers' rounding |