I have a report that has multiple 0 values, but instead of showing the zero, crystal shows a blank space instead. then, 2 columns over i have a field that should subtract another field from that 0 and be negative, but since the zero field is empty, it wont and the difference comes up empty two. Any idea how to fix this?
this is my code snippet for the field that has the zero:
if {fullmain.initres} > 0
then {fullmain.initres}
else 0.00
this is my code snippet for the field that should show the difference :
if {#RESERVE} > 0 then
{#RESERVE}-{#AMOUNT}
else 0 - {#AMOUNT}
place the field({fullmain.initres} and {#RESERVE}) right next to your formula and check if it is returning a null value, in this case blank. If so you might need to add and or to your if statement saying
if isnull({fullmain.initres} <= 0 or {fullmain.initres})
then 0.00
else {fullmain.initres}
if isnull({#RESERVE} or {#RESERVE} <= 0)
then 0 - {#AMOUNT}
else {#RESERVE}-{#AMOUNT}
Related
My report have an error using below script.
If the field have value will display the value inside, if don't have need to set it as 0, but report show empty value.
If {Invoice.TaxExempted} <> "" then
tonumber({Invoice.TaxExempted})
else
tonumber(0)
Result
if have value 400 : it do display 400.00
but if empty value : it just show empty only, but i wish it display 0.00
Most likely, the field is not blank (""). Instead, it's NULL.
So change the formula to:
if isnull({Invoice.TaxExempted}) Then
0
else
tonumber({Invoice.TaxExempted})
I need to calculate the overall sum without strikeout value
invoice values
--------------------------------
VI 320
VI 260
VI 72
VI 72
-VI- -72-
Just imagine the last value with - symbol is the strikeout value
the total sum should be 724.
i tried doing like the following formula but it return 0 value
IF {Command.void_flg} = 0 THEN
Sum ({Command.Vessel_amt})
First create a new formula #Vessel amt
if ({Command.void_flg}) = 0 THEN
{Command.Vessel_amt}
else 0
Then create another formula #Sum amt.
SUM({#Vessel amt})
Then drag #Sum amtto the place you want.
I'm trying to compare two fields that contain up to 2 digit field.
One formula field is a {string} the other to compare to is a {number} field.
But i"m running to a problem when the string field shows for example "08" and the number field shows "8" then it will show 1 that there is a differences but actually there is no difference. If the string field shows 14 and the number field shows 14 that works perfectly but anything between 1-9 will show a difference when actually there is no difference.
This is what I tried so far.
If {number.field} = 0
Then StringVar AdjustValue:= " "
Else StringVar AdjustValue:= totext ({number.field},0,"")
;
if {#stringfield} = StringVar AdjustValue then 0 else 1
Thanks in advance for the help.
Instead, convert from string to numeric so you don't have to worry about leading zeros.
if tonumber({#stringfield})={number.field} then 0 else 1
And just a quick side note: You are re-declaring the AdjustValue variable three times. There's no need to refer to it via "StringVar" after an initial variable declaration within the same formula.
EDIT: Since you're having problems with the top formula, you could also try the alternative of just padding your AdjustValue variable to two spaces:
stringvar AdjustValue;
If {number.field} = 0
Then AdjustValue:= " "
Else AdjustValue:= totext ({number.field},"00") //add padding
;
if {#stringfield} = StringVar AdjustValue then 0 else 1
Keep it simple with a formula field that will return a Boolean value:
// {#compare}
ToNumber({#string})={number.field}
Reference the {#compare} where ever you need it.
How can I compare two numbers with an inequality? (greater than or less than)
I want to compare single digits
For example
1 2
5 3
9 2
etc.
This is the best way to compare two numbers.Why because, if you are intelligent enough, you can use the same code in bigger programs.It's highly portable.
Assume we have two numbers a,b.
we have two blocks : if( a>=b ) and else,
Hope its enough.
0 1 0 a b 0
Make the array like this. And point to the (4) i.e. point to the a
+>+< This is for managing if a=0 and b=0
[->-[>]<<] This is a magic loop. if a is the one which
reaches 0 first (a<b),then pointer will be at(4).
Else it will be at (3)
<[-
// BLOCK (a>=b)
//You are at (2) and do whatever you want and come back to (2).
//Its a must
]
<[-<
// BLOCK(a<b)
//You are at (1) and do whatever you want and come back to (1).
//Its a must
]
It will not affect the following program code as both the code blocks will end up in (1) You can do further coding assuming that pointer will reach (1)
Please remove the documentation if you copy the code. Because code contains some valid brainfuck symbols like < . , etc.
Once you know which is the distance between the two numbers you should or decrement both of them in the same loop iteration and then check both for being zero: you will understand which one is the smaller.
Eg:
+++++ > +++ < [->-< check is first is zero, then second]
(this is just to give you a hint, you will have to take care about equal numbers and similar issues.
I was thinking about this too, and while I'm sure this isn't the best solution, at least it can answer the question of which number is larger =)
The program asks for two characters, outputs '<' if the first is smaller, '>' if it is larger, and '=' if they are equal. After outputting one char, the program halts by asking for additional input.
+>,>,<<[>-[>>>]<[>>-[>++++++++++[->++++++<]>.,]++++++++++[->++++++<]>+.,]<-[>>>]<<[>>>++++++++++[->++++++<]>++.,]<<<]
Hopefully somewhat clearer:
+ init (0) to 1
>, read (1)
>, read (2)
<<[ loop forever
>-[>>>] decrement (1) going to (4) if (1) != 0
<[ goto (0) == 1 if (1) reached 0 (otherwise goto (3))
>>-[>++++++++++[->++++++<]>.,] decrement (2) printing lessthan if larger than 0
++++++++++[->++++++<]>+., if (2) == 0 print '='
]
<-[>>>] decrement (2) going to (5) if (2) != 0
<<[ goto (0) == 1 if (2) reached 0 (otherwise goto (3))
>>>++++++++++[->++++++<]>++., print largerthan since (2) reached 0 first
]
<<< goto(0)
]
I made a solution, that gives you back a boolean and the pointer always at the same point.
This is how it looks like at the beginning:
0 0 0 a b 0 0
p
And these are the two possible outputs:
0 0 0 0 0 1 0 #true
p
0 0 0 0 0 0 0 #false
p
The code:
>>>>
[ # while cell != 0
- # decrement a
[ # if a != 0
>- # decrement b
[ # if b != 0
< # go left
<-< # undo the finally-block;
] # finally-block
<[-]> # clear a
>+> # res = 1; move to end-position
<<< # undo the finally-block
] # finally-block
>[-]>> # clear b; res = 0; move to end-position
] #
minified version:
>>>>[-[>-[< <-<]<[-]>>+><<<]>[-]>>]
Given two numbers A and B, the following code will print A if A is greater than B, B if B is greater than A and C if both are equal.
>>>>>>>>>++++++[>+++++++++++<-]>[>+>+>+<<<-]>+>->
<<<<<<<<<<<,>,<
[->-<[>]<<]>>>[>>]>>>>>>>>.
No such thing exists in BF. The > and < in BF move the pointer to the right and to the left, respectively.
I'm trying to write a program that cleans data, using Matlab. This program takes in the max and min that the data can be, and throws out data that is less than the min or greater than the max. There looks like a small issue with the cleaning part. This case ONLY happens when the minimum range of the variable being checked is 0. If this is the case, for one reason or another, the program won't throw away data points that are between 0 and -1. I've been trying to fix this for some time now, and noticed that this is the only case where this happens, and if you try to run a SQL query selecting data that is < 0, it will leave out data between 0 and -1, so effectively the same error as what's happening to me. Wondering if anyone might recognize this and know what it could be.
I would write such a function as:
function data = cleanseData(data, limits)
limits = sort(limits);
data = data( limits(1) <= data & data <= limits(2) );
end
an example usage:
a = rand(100,1)*10;
b = cleanseData(a, [-2 5]);
c = cleanseData(a, [0 -1]);
-1 is less than 0, so 0 should be the max value. And if this is the case it will keep points between -1 and 0 by your definition of the cleaning operation:
and throws out data that is less than the min or greater than the max.
If you want to throw away (using the above definition)
data points that are between 0 and -1
then you need to set 0 as the min value and -1 as the max value --- which does not make sense.
Also, I think you mean
and throws out data that is less than the min AND greater than the max.
It may be that the floats are getting casted to ints before the comparison. I don't know matlab, but in python int(-0.5)==0, which could explain the extra data points getting in. You can test this by setting the min to -1, if you then also get values from -1 to -2 then you'll need to make sure casting isn't being done.
If I try to mimic your situation with SQL, and run the following query against a datatable that has 1.00, 0.00, -0.20, -0.80. -1.00, -1.20 and -2.00 in the column SomeVal, it correctly returns -0.20 and -0.80, which is as expected.
SELECT SomeVal
FROM SomeTable
WHERE (SomeVal < 0) AND (SomeVal > - 1)
The same is true for MatLab. Perhaps there's an error in your code. Dheck the above statement with your own SELECT statement to see if something's amiss.
I can imagine such a bug if you do something like
minimum = 0
if minimum and value < minimum