Link to home
Start Free TrialLog in
Avatar of TBSupport
TBSupport

asked on

Crystal Reports--Eliminating Rounding in a Formula

Hello:

I have the following formula in Crystal Reports:

if {IV00101.USCATVLS_5} = "" then
0
else
(Cdbl({IV00101.USCATVLS_5})*1.0)/2.2046

This results in .13.  I need it to result in .127 (i.e. no rounding).  

How do I accomplish this?

Thanks!

TBSupport
Avatar of Mike McCracken
Mike McCracken

Are you just displaying this on the report?

Have you formatted it to show more than 1 decimal?
Right click the field
Click FORMAT FIELD
Click the NUMBER tab
Choose the format you want or click customize
Set decimals to 2 and rounding to .01

mlmcc
mlmcc is probably correct and it's just the formatting, although you want 3 decimals instead of 2.

 FWIW, you could eliminate the test for "" if you use Val, instead of CDbl.  Val converts any leading numeric characters in a string to a number.  For example, Val ("123abc456") would give you 123.  For an empty string (""), you'd get 0.  So, your formula could be just one line:

(Val({IV00101.USCATVLS_5})*1.0)/2.2046


 James
Avatar of TBSupport

ASKER

It's not a matter of formatting.  I need the result mathematically to be .127, as well as to display .127.  And, I'm afraid that the "Val" formula resulted in the same figure (.13).

TBSupport
CR doesn't normally round calculations to 2 decimal places.  I'm sure there's a limit to how many decimal places it will calculate, but it's much more than that.  For example, the following formula gives me 0.1270 when I format the field to show 4 decimal places, and there are more decimals there, if I let it show them.

(Cdbl(".28")*1.0)/2.2046

 If you try that formula, what result do you get?

 Just to make sure, if you're using the "Customize" option in the field format, make sure you set both "Decimals" and "Rounding".

 James
I don't understand what you mean by the "Customize option".

I'm just trying to find a way, through modifying the formula, to get Crystal to not round to the second decimal place.  

TBSupport
To the best of my knowledge, Crystal does NOT round values except for display.  It is not being rounded in the calculation


Have you tried

if {IV00101.USCATVLS_5} = "" then
0
else
(Cdbl({IV00101.USCATVLS_5})*1.000)/2.2046

or

if {IV00101.USCATVLS_5} = "" then
0
else
Cdbl({IV00101.USCATVLS_5})/2.2046


mlmcc
ASKER CERTIFIED SOLUTION
Avatar of James0628
James0628

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
When I go to the field format, there is no "Number" tab.
You're looking at the field format for which field?

 You included a formula in your first post.  We (I think I can speak for mlmcc on this) have been assuming that you created a formula in the report that contains only the lines in the formula in your first post, and then you put that formula on the report, and the value that was displayed on the report appeared to be rounded.

 But if there is no Number tab in the field format window, then that field is not numeric, but result of the formula that you posted _is_ numeric.  So either you're looking at the format for a different field, or there is more to your formula than what you posted here.  If you're looking at a different field, how is it related to the formula that you posted?  If there is more to your formula, can we see the rest of it?

 James
Agree.  If you don't see the number tab then the field is not numeric.  Your formula probably has either a ToText or CStr that converts the number to text.  Generally you can control the conversion with a format string or number of decimal places.

Perhaps the formula is being used in another formula for display.

mlmcc
I really don't think that it has any bearing.  But, the formula that I posted is called "Unit Weight" and is embedded in the following formula on the report:

"Unit Weight: " & {@Unit Weight} & " "&{@pounds and kilos}

Again, though, it doesn't matter.  There should be someway to have the Unit Weight formula be ".127" instead of ".13".  I can't believe that something that should be very simple is turning into something hard.

TBSupport
The problem is the formula is turning the number into a string and using the default formatting which is probably set to 2 decimals


"Unit Weight: " & CStr({@Unit Weight},3) & " "&  CStr({@pounds and kilos},3)

The 3 is the number of decimals to use

You can also use a format string


"Unit Weight: " & CStr({@Unit Weight},"0.000" & " " & CStr({@pounds and kilos},"0.000")

mlmcc
Like mlmcc said, the problem is that you're converting the formula result to a string and letting CR use the default format, and it's defaulting to 2 decimal places.  The formula that does the calculation is not rounding the result to 2 decimal places.  It's the conversion to a string that's doing that.  Changing the format that's used to create the string should take care of it.

 James
Hello:

I figured this out.  I took the formula that I posted out of the formula that it was originally placed in.

Then, I took the formula that I posted, right-clicked on it, chose "Format Field", choose the Number tab, and then clicked the "Customize" button.

Finally, I chose three decimal places and three places for rounding.

That did it.

Thanks, for your help!

TBSupport
Glad we were finally able to get it sorted out.


 mlmcc,

 Are you OK with the point distribution?  There was a lot of discussion while we were trying to figure out what was going on.

 James