 |

|
Our finance folks were a bit annoyed by one of our web pages, where it occasionally rounded the final total to the nearest dime. While troubleshooting a former colleague's JavaScript code that added 2% to the amount entered by the user, I found this gem. His intention, at least, was obvious by the function name.
function CurrencyFormatted(amount) {
var i = parseFloat(amount);
if (isNaN(i)) { i = 0.00; }
var minus = '';
if (i < 0) { minus = '-'; }
i = Math.abs(i);
i = parseInt((i + .005) * 100);
i = i / 100;
s = new String(i);
if (s.indexOf('.') < 0) { s += '.00'; }
if (s.indexOf('.') == (s.length - 2)) { s += '0'; }
s = minus + s;
return s;
}
Isn't that brilliant? I mean, why use the simple, single-line solution isFixed(2) when you can do the same thing in 9 lines?
If you think 'goto' is evil, try writing an Assembly program without JMP.
modified 11 hrs ago.
|
|
|
|

|
Perhaps he didn't know isFixed exists
.-.
|o,o|
,| _\=/_ .-""-.
||/_/_\_\ /[] _ _\
|_/|(_)|\\ _|_o_LII|_
\._. |\_/|"` |_| ==== |_|
|_|_| ||" || ||
|-|-| ||LI o ||
|_|_| ||'----'||
/_/ \_\ /__| |__\
|
|
|
|

|
GregorianCalendar date = new GregorianCalendar(1888, 0, 1, 0, 0, 0);
SimpleDateFormat sdf = new SimpleDateFormat("YYYY");
String convertedstring = sdf.format(date.getTime());
System.out.println(convertedstring);
output: 1887 (on my laptop anayway)
GregorianCalendar date = new GregorianCalendar(1888, 0, 1, 0, 0, 0);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy");
String convertedstring = sdf.format(date.getTime());
System.out.println(convertedstring);
output: 1888
For those who didn't notice, in sample 1 I put "YYYY", in sample 2 "yyyy".
I couldn’t immediately find something in the docs or google explaining this…
|
|
|
|

|
"YYYY" means week years.
Quote: A week year is in sync with a WEEK_OF_YEAR cycle. All weeks between the first and last weeks (inclusive) have the same week year value. Therefore, the first and last days of a week year may have different calendar year values.
For example, January 1, 1998 is a Thursday. If getFirstDayOfWeek() is MONDAY and getMinimalDaysInFirstWeek() is 4 (ISO 8601 standard compatible setting), then week 1 of 1998 starts on December 29, 1997, and ends on January 4, 1998. The week year is 1998 for the last three days of calendar year 1997. If, however, getFirstDayOfWeek() is SUNDAY, then week 1 of 1998 starts on January 4, 1998, and ends on January 10, 1998; the first three days of 1998 then are part of week 53 of 1997 and their week year is 1997
SimpleDateFormat[^]
GregorianCalendar[^]
|
|
|
|

|
Quite odd, that is.
Gryphons Are Awesome! Gryphons Are Awesome!
|
|
|
|
 |
Message Automatically Removed
|
|
|
|

|
An application that presents it's UI in html5 and runs in a browser as a regular webpage. Leveraging html5 technoligies, it can do pretty much the same thing that a standard user level application does... Like a word processor. Anyways Let me google that for you![^]
But don't tell about a disk defragmanter HTML5 App!
You're new, please read the announcement at the top, this ain't the right place for asking questions...
|
|
|
|
|

|
Draw.IO[^]
Remember...
Post your Best, your worst, and your most interesting. But please - no programming questions . This forum is purely for amusement and discussions on code snippets.
|
|
|
|

|
OK... But I have more questions about this topic...
What should I do
-Toywarrior
|
|
|
|

|
We've got programming forums here in CP, see Discussions > Web Developments
|
|
|
|

|
Will You Join me There????
-Toywarrior
|
|
|
|

|
If you post then... if I get you
|
|
|
|

|
Looks like you've pulled
|
|
|
|

|
I can beat that - I discovered a bug where new records were failing to be added.
After a number of false trails, I homed in on the following SQL user function:
ALTER function [dbo].[ufn_GetNextID](@IDTable as varchar(100), @IDColumn as varchar(100))
returns integer
as
begin
declare @NewID as integer
set @NewID=0
return @NewID
end
"If you don't fail at least 90 percent of the time, you're not aiming high enough."
Alan Kay.
|
|
|
|

|
Gryphons Are Awesome! Gryphons Are Awesome!
|
|
|
|

|
I don't see anything wrong there, what does "0" mean anyway?
|
|
|
|

|
if(SomeThing == SomeOtherThing);
{
DoSomeThing;
}
This one has been sitting in the codebase for a couple of years...
At least it did SomeThing...
|
|
|
|

|
Which language? The C# compiler will give you a warning for that: "Possible mistaken empty statement".
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|

|
Even C back in the old days gave you a warning for that.
|
|
|
|

|
Wich compiler ?
while (*dest++ = *source++);
is completely correct, isn't it ?
|
|
|
|

|
It's a warning, not an error, for that reason. This was back when I used Zortech's ANSI C compiler.
|
|
|
|

|
Klaus-Werner Konrad wrote: Wich compiler? FTFY: Witch compiler
Actually, in this case the C# produces three useless wormings: both for the "while(...);" (an empty statment), "x=y" (an assigment instead of a comparison) and the "*" (an "unsafe" code), does it?
Greetings - Jacek
|
|
|
|

|
Thanks for the correction.
My example was - as a reply to the mention of C, of course a C code snippet,
and is the full working function body for strcpy().
Of course, it's unsafe - but lightning fast
|
|
|
|

|
Just in case you didn't get the joke there, he's making a funny about the compiler being witchcraft. The word you meant to use is 'which'.
|
|
|
|

|
They're not useless warnings, they're warning you that you did something unintended. Actually this wouldn't compile at all in C#, even with unsafe mode turned on, because the result type isn't boolean. It's a classic and well known piece of C code, and I think you only got a warning for the empty loop body (and if you did if(a = 3) by accident you were just screwed, hence writing if(3 == a) instead which is an error if you screw it up).
|
|
|
|

|
Right.
Greetings - Jacek
|
|
|
|

|
Does that even compile?
/ravi
|
|
|
|

|
No, it doesn't. But that's just the bug: it doesn't compile!
[EDIT]
I'm sorry, I didn't see the semicolon after the if statement. That's the bug!
modified 2 days ago.
|
|
|
|

|
It seems that problem is in semicolon after "if" statement.
DoSomeThing will be fired any time the code executes.
|
|
|
|

|
anton_l wrote: It seems that problem is in semicolon after "if" statement. It seems that's the reason he posted it!
|
|
|
|

|
This is one of the dangers of C syntax (and friends). That's the price you pay for willing conciseness. Block-only statements like VB's
If Condition Then
Statement
End If
or Modula's
IF Condition THEN
Statement
END
are safer.
|
|
|
|

|
Or Pascal:if condition then
begin
DoStuff();
end
else
begin
DoOtherStuff();
end; Sort an 'are you sure?' prompt for every single conditional.
Software Zen: delete this;
|
|
|
|

|
Can't you do if condition then one-statement else other-statement though if you don't need a block?
|
|
|
|

|
Yes, but I've always hated doing those, unless you write it on a single line:if condition then DoSomething() else DoOtherThing(); That's the only way in my mind to avoid stupid mistakes like this:if condition then
DoThing1();
DoThing2();
DoThing3();
MainStuff();DoThing2() and DoThing3() look like they're part of the if, but they're not. I do the same thing in C-style languages. If an if-statement occupies more than one line, it gets braced.
Software Zen: delete this;
|
|
|
|

|
I agree and would always put that on a single line.
|
|
|
|

|
Quote: If an if-statement occupies more than one line, it gets braced.
Maybe I'm naïve, but I thought everybody did that!
|
|
|
|

|
I've worked with people who did this:if condition
DoSomething();
else
{
DoOtherThing1();
DoOtherThing2();
}orif condition
{
DoSomething1();
DoSomething2();
}
else
DoOtherThing();Both of which give me the creeping heebie-jeebies.
Software Zen: delete this;
|
|
|
|

|
Gary Wheeler wrote: if condition then
DoThing1();
DoThing2();
DoThing3();
MainStuff();
Yeah that's one of my all-time favorites. It usually starts out like:
if(condition)
DoThing1();
And then someone comes along later and adds DoThing2(), and the compiler silently chuckles to itself and lets the code do a lot of Thing2.
Personally, I like to always use curly braces to block off code for that very reason, even if it's only one statement. If I see something like that with one statement, I'll add the braces so it's clear when someone comes along and changes it.
Putting it all on one line works fine as well, but I like to always create a code block because it makes it easier to add statements later. And really, what's the point of keeping it on one line? But I know a lot of programmers have an irrational fear of vertical space
|
|
|
|

|
Oh no, you misunderstood the guy who wrote that piece of code.
Never did he intend that DoSomeThing() is executed only when some codition is true. He just wanted to make his colleagues (who'll have to maintain his buggy code after he quit his job) believe so.
|
|
|
|

|
Seems like a new style of comment... if you're compiler doesn't support any comments.
"Program testing can be used to show the presence of bugs, but never to show their absence."
<< please vote!! >>
|
|
|
|

|
I had to read it three times before spotting the problem. Go bugged by the fact that DoSomeThing didn't have parenthesis.
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson
----
Our heads are round so our thoughts can change direction - Francis Picabia
|
|
|
|

|
Me too. I didn't see the semicolon until I review it two or three times. So maybe it is not a trap but a genuine bug. Some times you check your code 10 times and do not see this kind of bugs.
You may forget having good days, just because you are remembering the past or thinking too much about the future. Live now and enjoy the moment!!
|
|
|
|

|
Tell me about it. I'm specially vulnerable to problems that are right in front of my face.
I do this too often:
Maybe it's my short span of attention.
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson
----
Our heads are round so our thoughts can change direction - Francis Picabia
|
|
|
|

|
This errors can be present in C like language. The last only in C#
This one is usual (very)
if(Something)
One();
two();
...
Of course only One() is inside the if(), but it seems that the other two instructions are inside also. I did fall in this bug many times until I decided to enclose into curly braces any if() or loop with one or more instructions. It could increase the number of lines, but, for sure, decrease the bugs.
Other one:
bool MyBoolValue = true;
if(MyBoolValue = false){
... SomeStuff ...
}
Maybe the compiler throws a warning, but this statement is valid. Surely is not what you want to do because you have omitted one equal sign:
if(MyBoolValue == false)...
I have no solution to this one, but to check again
Of course the comparison is not necessary, because MyBoolValue is true or false per se.
if(MyBoolValue)...
for(int i = 0; i < MyArray.GetUpperBound(0); i++){
SomeStuff....
}
You must remember that GetUpperBound(0) does not start in '0' but in '1', because is the number of elements not the dimensions of the array so it must be:
for(int i = 0; i <= MyArray.GetUpperBound(0); i++)
I will try to remember more "Mistakes" that are common for me, but for sure here are more qualified people to show you many more.
You may forget having good days, just because you are remembering the past or thinking too much about the future. Live now and enjoy the moment!!
|
|
|
|

|
I usually prefer:
if (42 == ComputeSomeThing(x)) {
}
This one avoids the = against == pit.
Another thing I do: my IDE is configured to show operators (like '(){};,+-=...') in color, so they are a bit harder to miss (like the original example).
There are two other tools that can help with this: compiler warnings, and static code analysis.
JM2B,
Pablo.
"Accident: An inevitable occurrence due to the action of immutable natural laws." (Ambrose Bierce, circa 1899).
|
|
|
|

|
Pablo Aliskevicius wrote: This one avoids the = against == pit.
LOL, that one kills me, because I'm constantly switching back and forth between C# and VB
|
|
|
|

|
gervacleto wrote: if(Something)
One();
two();
...
This can also happen in C#, but auto indent of Visual Studio makes you less likely to fall in this trap.
gervacleto wrote: if(MyBoolValue = false){
This happened to me several times and the warning saved. I always pay attention to warnings.
gervacleto wrote: if(MyBoolValue)
I do not consider this a bug, it is actualy a coding style. I do it myself.
gervacleto wrote: for(int i = 0; i <= MyArray.GetUpperBound(0); i++)
Never used this construct, so I wouldn't know. But will keep my mind to it in case I run into this. Thanks!
To alcohol! The cause of, and solution to, all of life's problems - Homer Simpson
----
Our heads are round so our thoughts can change direction - Francis Picabia
|
|
|
|

|
the semi-colon on the end of the conditional, the block will always execute.
DoSomething is in its own little world and will always execute.
C# will just raise a warning on the conditional but will not compile with the DoSomeThing becuse it is not a method or an assignment.
But, what if it is not C# compiler, then there could be compilers that would allow this and it would be worthless code, i still use Crimson, NotePad, etc to write code. Either to many semi colons or not enough !!
|
|
|
|

|
I bet that in DoSomeThing there is logic to handle the strange case when the if condition is not firing properly.
|
|
|
|
 |