Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Round a number
Message
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Title:
Miscellaneous
Thread ID:
00174482
Message ID:
00174491
Views:
31
>>>How can I take a number like 1.345 and round it to a specific precision like .2?
>>>
>>>1.3456 precision .2 = 1.4
>>>1.6345 precision .5 = 1.5
>>>1.3456 precision .005 = 1.345
>>>
>>>I think that I need to figure out how many decmil places and ROUND() the number then somehow round to the precision
>>>
>>>
>>>Thanks
>>
>>
>>John, I just cooked this up and it should handle all your needs... 3 simple parameters...
>>
>>
>>? 1.3456, PreciseRound( 1.3456, .2, 1 )
>>? 1.6345, PreciseRound( 1.6345, .5, 1 )
>>? 1.3456, PreciseRound( 1.3456, .005, 3 )
>>
>>*/ function to round precision
>>*/ Ex: PreciseRound( 123.3321, .4, 1 )
>>function PreciseRound( lnValue, lnPrecVal, lnDec )
>>   local lnNewVal, lnRem
>>	
>>   */ Put into whole number and do primary rounding
>>   */ before determining precision up/down...
>>   lnNewVal = round( lnValue, lnDec +1 )
>>	
>>   */ Now, based on precision what remainder would
>>   */ be left in case not exactly divisible
>>   lnRem    = mod( lnNewVal, lnPrecVal )
>>	
>>   */ if over the halfway precision mark, round up
>>   if lnRem / lnPrecVal >= .5
>>      lnNewVal = lnNewVal + lnPrecVal - lnRem
>>   else
>>      lnNewVal = lnNewVal - lnRem
>>   endif
>>return( round( lnNewVal, lnDec ) )
>>
>
>
>Try this out for 2 decimal places
>
>lnVar = 1.545
>
>lnVar=(int(lnVar*100)/100)
>?lnVar
>the answer should be 1.54
>
>if you want to round it up to 1.6
>
>lnVar = (int(lnVar*10)+.5)/10
>
>HTH
>
>
>
>HTH

I don't think that was what he was looking for... He needed it to be more generic to accommodate multiple decimal precision and what if the precision factor was .725??? How would your solution accommodate this... For each decimal level out, you would also have to change the int( x*100)/100.
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform