First: I'm sorry to hijack this thread and veer offtopic so hard.
But none of these alternatives solves the rounding problem (which is fundamental; some numbers simply can't be represented precisely in finite). The only solution is to deal knowingly with the problem and especially to round only for the presentation and for the end results, never for intermediary results.
That's not he problem at all. The problem is that numbers less than 0 which can be represented exactly in decimal system, not always can be represented EXACTLY in binary. Sure, you can have double and quadriple precision and perhaps make some sort of checks which will treat numbers like 0.29999999999999 as 0.3, but that's more like workarounds.
The only right way to do financial software is exact decimal types.This is owed to the fact that the financial world uses decimal. If these guys weren't bankers but mathematicians, the only right way to write software for them would be to use some certain kind of symbolic expressions.
Side-note: Back when I joined Bitcoin there was some dude on irc (forgot his name, he might still be around) constantly trying to convince people we should use a kind of base-16 number system (not hexadecimal, but similar, I forgot the name, some other bloke tried to convince people in britain in the 19th century to use it and failed) for bitcoin. That would've clearly prohibited any sort of success for bitcoin in my mind.
You often hear "floatinig point is evil". Mostly this is an urban legend.
Floating point numbers can be dangerous only when used naively.
More specifically, there is a standard-type of floating point number in many programming languages, which is often called "float". The key point is that this number type uses only the so called single precision (3 bytes mantissa, 1 byte exponent). This is enough to represent roughly 4 places without error. And this is indeed not sufficient for financial math.
I agree that the problem is not using floating point but storing/calculating in binary and displaying in decimal. The fact that "some numbers" cannot be represented with finite number of digits is not very relevant. While this - apart from numbers like sqrt(2) or sqrt(-1) - includes some commons numbers like 1/3, you're unlikely to encounter these numbers in this setting (because they can't be entered in decimal by a user). Of course it might pop up when you're trying to make 3 slices from one pizza or something (1 pizza is a financial unit now, I hear), but usually you just give everyone 0.33 pizzas and pocket the remaining 0.01 yourself in such a case.
I also agree this is pretty much a non-issue (just using double precision and rounding only at display time should work in most cases)
I'm not sure the concerns about speed of floating point decimals are an issue either. In a database-heavy app you usually have other performance bottlenecks that are much more severe.
Maybe it's interesting to note that IBM (used to) put decimal floating point arithmetic instructions into some of their CPUs:
http://www.ibm.com/developerworks/wikis/display/hpccentral/How+to+Leverage+Decimal+Floating-Point+unit+on+POWER6+for+LinuxI'll try to honor Ichthyos advice.
But none of these alternatives solves the rounding problem (which is fundamental; some numbers simply can't be represented precisely in finite). The only solution is to deal knowingly with the problem and especially to round only for the presentation and for the end results, never for intermediary results.