I have a crystal report where a numeric field needs to be a fixed length with a decimal and needs to not round up or down. I changed it to a text field but now when I run the report and I forget to change the options in crystal for a number field to show ####.## it rounds to nearest dollar amount and drops the cents. How can I fix it so I won't have to remember to change the options?
An example may be helpful -
If the field is numeric, or decimal, you can right click the field, select "format field", click Customize, Number, and select the rounding and decimal logic.
if you don't have enough decimal places allowed (say, zero decimals) then make sure the rounding is not set to "1" - that would cause the number to round up. if the rounding is less than or equal to the decimal places, it should just 'truncate' and not round.
Related
Rounding of static value is different from rounding DB field value in SAP B1 crystal report 2011
I have 609,437.50 from Database when I go to Field Format and then round field I get 609,437
I have 609,437.50 in formula as static value when I round I get 609,438 which is correct same as excel
How can I round Database field and get value like 609,438 while I have 609,437.50?
Please anyone can help me
You likely have database value different from xxx.50.
What data type is your value in database - some float or decimal or money?
If float, then you have to convert it to decimal first - float values are inexact and rounding may behave strangely.
If decimal or money, then you may have more decimal places filled (like xxx.499), which rounds down again. You need either accept your results or round to two decimals first; this can be visually better, but is wrong mathematically.
Good Morning!
I am working in Crystal Reports 2008 & have a report template that I'd like to use with various dynamic parameters (called in a downstream application).
My data can vary from being on a scale of 0-1 to a scale of 1,000-10,000.
I'd like to display it with 3 significant figures so when the report pulls in a dataset that
looks like this --> displays like this
0.76895 --> 0.769
0.6672 --> 0.667
1.0335 --> 1.03
but when the data set
looks like this --> displays like this
12,125.65 --> 12,100
956.35 --> 956
4,352.22 --> 4,350
My current work around is to make two templates-- one to use with my small value data, set to display 3 decimal places; and another to use with my large value data, set to display no decimal places.
I was wondering if there was a way to set significant figures displayed rather than decimal points?
Oh! I would do it in SQL first and pass it in as a string but I need these as numeric values so I can summarize them elsewhere in the report. Thanks.
If you right-click on your numeric field and choose format, Customize..under the number tab you get a bunch of choices to set the decimal separator, how many decimals to display, etc. choosing the formula button next to Decimals, you could put in a formula that looks at the amount of digits after the decimal dot and then either set the decimals to 2 if there are more than 3 decimals, and to zero decimals if there are 2 decimals. They key here is to get the order right. You want to check for the 2 decimals first and then for 3 or more decimals. If you do it the other way around the formula will display everything without decimals.
Hope that helps,
Chris
Use something like this.
ToNumber(Totext(<<DatabaseField>>,0,""))
I have a Report Using SSRS BIDS 2008 R2. I am looking for a method of converting my number by simply removing the decimal. I want to keep the numbers after the decimal just remove the '.'
The Goal:
Format a number (currently a currency) into a string but keep the trailing numbers.
i.e.
Current Value 30.56
Desired Value 3056
I have found numerous ways to remove the decimal but they all end up either rounding my number or removing the numbers after the Decimal point. I was wondering if it was possible to keep the numbers after the decimal place, but have no decimal.
I feel like I am missing something important here and will more than likely feel a little silly once it is pointed out.
Thanks in advance.
Just convert the number to a string and replace the .:
=Replace(Fields!MyColumn.Value.ToString, ".", "")
I've a small number in a PostgreSQL table:
test=# CREATE TABLE test (r real);
CREATE TABLE
test=# INSERT INTO test VALUES (0.00000000000000000000000000000000000000000009);
INSERT 0 1
When I run the following query it returns the number as 8.96831e-44:
test=# SELECT * FROM test;
r
-------------
8.96831e-44
(1 row)
How can I show the value in psql in its decimal form (0.00000000000000000000000000000000000000000009) instead of the scientific notation? I'd be happy with 0.0000000000000000000000000000000000000000000896831 too. Unfortunately I can't change the table and I don't really care about loss of precision.
(I've played with to_char for a while with no success.)
Real in Postgres is a floating point datatype, stored on 4 bytes, that is 32 bits.
Your value,
0.00000000000000000000000000000000000000000009
Can not be precisely represented in a 32bit IEEE754 floating point number. You can check the exact values in this calculator
You cold try and use double precision (64bits) to store it, according to the calculator, that seems to be an exact representation. NOT TRUE Patricia showed that it was just the calculator rounding the value, even though explicitly asking it not to... Double would mean a bit more precision, but still no exact value, as this number is not representable using finite number of binary digits. (Thanks, Patricia, a lesson learnt (again): don't believe what you see on the Intertubez)
Under normal circumstances, you should use a NUMERIC(precision, scale) format, that would store the number precisely to get back the correct value.
However, your value to store seems to have a scale larger than postgres allows (which seems to be 30) for exact decimal represenations. If you don't want to do calculations, just store them (which would not be a very common situation, I admit), you could try storing them as strings... (but this is ugly...)
EDIT
This to_char problem seems to be a known bug...
Quote:
My immediate reaction to that is that float8 values don't have 57 digits
of precision. If you are expecting that format string to do something
useful you should be applying it to a numeric column not a double
precision one.
It's possible that we can kluge things to make this particular case work
like you are expecting, but there are always going to be similar-looking
cases that can't work because the precision just isn't there.
In a quick look at the code, the reason you just get "0." is that it's
rounding off after 15 digits to ensure it doesn't print garbage. Maybe
it could be a bit smarter for cases where the value is very much smaller
than 1, but it wouldn't be a simple change.
(from here)
However, I find this not defendable. IMHO a double (IEEE754 64bit floating point to be exact) will always have ~15 significant decimal digits, if the value fits into the type...
Recommended reading:
What Every Computer Scientist Should Know About Floating-Point Arithmetic
Postgres numeric types
BUG #6217: to_char() gives incorrect output for very small float values
Friends,
This is the formula in the crystal reports 9.
cdbl({nrconsolidated.collamt})/100000.000
nrconsolidated table is having 9 records.
in that one record's collamt value is 154250.
but in the crystal reports output its showing as 1.543 instead of 1.542.
i want only 3 decimal points.i dont know where the mistake is coming from?
in the crystal reports, i clicked on that collamt field and checked the data by seeing the browseData option...its showing as 154250.
how can i solve this issue? its showing the correct value in 4 decimal points but i want only 3 decimal points.
thanks
The below code will truncate the result after the calculation has been performed, and output it to 3 decimal places. This works for Crystal Syntax and should for Basic as well - I believe it is common amongst both.
truncate(cdbl({nrconsolidated.collamt})/100000.000,3)
On the field set the decimals 1.000 and rounding 0.001 will display what you want.