Cutting off decimals in Year conversion in Crystal Syntax - crystal-reports

I'm printing the following year as a string in a report but it prints as 2,018.00. How do I have it print as a four digit year string without decimals or the comma? The Truncate() didn't seem to work.
CStr (Year({Date}) + 1)

You can either omit the CStr-function and set the number format on the formatting tab or, if the formula needs to return a string, you can use the arguments of the CStr- or ToText-function (which are equivalent).
Either set the second argument to define the number format:
CStr(Year({Date}) + 1, "####")
Or
Set the second and third argument to set the number of decimals to 0 and an empty string as thousands separator:
CStr(Year({Date}) + 1, 0, "")

What is happening is the Year() function converts the data into a Number, complete with thousands separator, decimal, and 2 significant digits after the decimal.
To get around this what I have found that works is to remove the CStr() function from your formula. This allows you to access the Formatting tab for a Number data type by right clicking the field and selecting Format Field. Then from the Number tab you can set the Style of the field to one of the styles that doesn't use a separator or decimal in the display.
If you are needing to concatenate this value with another string, then you can get a little more creative and use the LEFT() and REPLACE() functions like this.
Left(Replace(Cstr(Year({Date}) + 1), ",", ""), 4)

Related

How do I combine static text and fields into a single field

I need to do this for multiple fields and text
So in one field I would want it be TEXT FIELD TEXT FIELD TEXT FIELD
So it would be L 12 X W 12 X 12
The letters would be static text and the numbers would be an actual field
Thanks
You would use a Formula Field to do this. Within the Formula Field you can concatenate plain text with database fields. Here is an example of a formula for a Formula Field.
"This is my custom string." & {table.column} & " more custom text.";
This formula will concatenate the first string contained within the double quotes, the value of {table.column}, and the second string contained within double quotes. If we assume the value of {table.column} is "Delta365", then the output of the formula field would be the following:
This is my custom text. Delta365 more custom text.
EDIT: Response to follow-up question.
To remove the decimal from a numeric value while using a formula to concatenate the numeric value to a string of text you should use one of the overloaded ToText() function. ToText(x,y) is the most commonly used versions of this function. Here is a breakdown of the arguments for this function.
x is a Number or Currency value to be converted into a text string.
y is a Format String that determines how the value of x will be
displayed.
There are two ways to use this function to remove the decimal point. Here is an example of each method using the same example I used previously.
"This is my custom string." & ToText({table.column},0) & " more custom text.";
Or
"This is my custom string." & ToText({table.column},"#") & " more custom text.";
The difference between these two formulas is the value of the y argument. When y = 0, the value of {table.column} will be rounded to the nearest whole number. When y = "#", the value of {table.column} is not rounded and instead will truncate and not show any digits beyond the decimal point.

How to delete space in character text?

I wrote a code that automatically pulls time-related information from the system. As indicated in the table is fixed t247 Month names to 10 characters in length. But it is a bad image when showing on the report screen.
I print this way:
WRITE : 'Bugün', t_month_names-ltx, ' ayının'.
CONCATENATE gv_words-word '''nci günü' INTO date.
CONCATENATE date ',' INTO date.
CONCATENATE date gv_year INTO date SEPARATED BY space.
TRANSLATE date TO LOWER CASE.
I tried the CONDENSE t_month_names-ltx NO-GAPS. method to delete the spaces, but it was not enough.
After WRITE, I was able to write statically by setting the blank value:
WRITE : 'Bugün', t_month_names-ltx.
WRITE : 14 'ayının'.
CONCATENATE gv_words-word '''nci günü' INTO date.
CONCATENATE date ',' INTO date.
CONCATENATE date gv_year INTO date SEPARATED BY space.
TRANSLATE date TO LOWER CASE.
But this is not a correct use. How do I achieve this dynamically?
You could use a temporary field of type STRING:
DATA l_month TYPE STRING.
l_month = t_month_names-ltx.
WRITE : 'Bugün', l_month.
WRITE : 14 'ayının'.
CONCATENATE gv_words-word '''nci günü' INTO date.
CONCATENATE date ',' INTO date.
CONCATENATE date gv_year INTO date SEPARATED BY space.
TRANSLATE date TO LOWER CASE.
You can not delete trailing spaces from a TYPE C field, because it's of constant length. The unused length is always filled with spaces.
But after you assembled you string, you can use CONDENSE without NO-GAPS to remove any chains of more than one space within the string.
Add CONDENSE date. below the code you wrote and you should get the results you want.
Another option is to abandon CONCATENATE and use string templates (string literals within | symbols) for string assembly instead, which do not have the annoying habit of including trailing spaces of TYPE C fields:
DATA long_char TYPE C LENGTH 128.
long_char = 'long character field'.
WRITE |this is a { long_char } inserted without spaces|.
Output:
this is a long character field inserted without spaces

How to parse and format an integer with zero decimal places in GWT?

Using GWT NumberFormat, I need to have a decimal format that basically accepts no decimal point character and zero decimal places. For example, 123 should be valid but 123.4 and 123.9 should be rejected. Also, rounding of decimal values into nearest integer is not an option.
I thought the following would work, but it does not:
double val = NumberFormat.getFormat("#0").parse(str);
I definitely need it to support GWT i18n formatting, such as "," separators for large numbers. The input "str" is for example the argument coming to a Parser.parse(text) method, similar to the one in IntegerParser. IntegerParser does not validate zero decimal places properly and only rounds the value rather than rejecting numbers with decimal point.
Any ideas?
Use IntegerParser.
It uses the following method under the covers:
(int) Math.rint(NumberFormat.getDecimalFormat().parse(object.toString()));
UPDATE:
Also, you can use LongBox instead of TextBox.
The way I finally solved my problem was by explicitly looking for decimal separator in the input string before trying to parse it using NumberFormat. Here is the code:
final String DECIMAL_SEPARATOR =
LocaleInfo.getCurrentLocale().getNumberConstants().decimalSeparator();
if (str.contains(DECIMAL_SEPARATOR))
throw new ParseException("Invalid integer value (" + str + ")", 0);
return (int) Math.rint(NumberFormat.getDecimalFormat().parse(str));
I am still interested in finding a better way to do it using NumberFormat.

Crystal report issue with int to string conversion

I want to convert int to string and then concatenate dot with it. Here is the formula
totext({#SrNo})+ "."
It works perfectly but not what i want. I want to show at as
1.
but it shows me in this way
1.00.
it means that when i try to convert int to string it convert it into number with precision of two decimal zeros. Can someone tell me how can i show it in proper format. For information i want to tell you that SrNo is running total.
ToText(x, y, z, w) Function can use
x=The number to convert to text
y=The number of decimal places to include in result (optional). The value will be rounded to that decimal place.
z=The character to use as the thousands separator. If you don’t specify one, it will use your application default. (Optional.)
w=The character to use as the decimal separator. If you don’t specify one, it will use your application default. (Optional.)
Examples
ToText(12345.678) = > “12345.678″
ToText(12345.678,2) = > “12345.67″
ToText(12345.678,0) = > “12345″
You can try this :
totext({fieldname},0)
Ohhh I got the answer it was so simple.
totext takes 4 parameters
First parameter is value which is going to be converted
Second parameter is number of decimal previsions.
Third parameter is decimal separator. like (1,432.123) here dot(.) is third parameter.
Forth parameter is thousand separator. like (1,432) here comma(,) is forth parameter.
Example{
totext("1,432.1234",2) results 1,432.12
totext("1,432.1234",2,' " ') results 1,432"1234
totext("1,432.1234",2,' " ', ' : ') results 1:432,1234
}
Although i think this example may be not so good but i just want to give you an idea. This is for int conversion for date it has 2 parameters.
value to be converted and format of date.

Postgresql, treat text as numbers for getting MAX function result

Still didnt fix issue with dates written as strings here comes another problem.
I have text column where only numbers as writen (like text).
By using function MAX I get incorrect result because there 9 is bigger than 30.
Is here any inline function like VAL or CINT or something that I can compare and use textual data (only numbers) like numbers in queries like SELECT, MAX and other similar?
How than can look like in following examples:
mCmd = New OdbcCommand("SELECT MAX(myTextColumn) FROM " & myTable, mCon)
You need to use max(to_number(myTextColumn, '999999'))
More details are in the manual: http://www.postgresql.org/docs/current/static/functions-formatting.html
If all "numbers" are integers, you can also use the cast operator: max(myTextColumn::int)
If your text values are properly formatted you can simply cast them to double, e.g.: '3.14'::numeric.
If the text is not formatted according to the language settings you need to use to_number() with a format mask containing the decimal separator: to_number('3.14', '9.99')
To get the MAX works poterly you need to first convert your text field in numeric format
mCmd = New OdbcCommand("SELECT MAX(TO_NUMBER(myTextColumn, '99999')) FROM " & myTable, mCon)