You won't always have round off to deal with. Binary fractions like 1/2, 1/4, 3/4, 1/8, etc. can be exactly represented as a double. But you're right that most numbers can't (assuming that the word "most" can be used of an infinite set).
The reason we put up with the inexactness is that exactness doesn't exist in the physical world. If a piece of wood is "2.4 meters long", it's really "2.4 meters give or take a millimeter" (which would be written as "2.400" to emphasize this). So, then, what difference does it make if your computer represents the length as 2.399999999999999911182158029987476766109466552734375 m, off by a mere 8.88e-17 m, when the physical accuracy is nowhere near that good?
The one exception is money. If something costs $3.99, it costs exactly $3.99, not $3.9900000000000002. If the sales tax is 8.25%, it's exactly 8.25%, not 8.2500000000000004%. And, because we use decimal currency, Decimal classes are often used for monetary amounts.
You could use it as a general-purpose number class, but:
(1) It's not a panacea for rounding error. You still have to deal with 1/3 + 2/3 != 1.
(2) Due to the lack of hardware support, it's much slower than binary floats.
Therefore, I wouldn't just blindly recommend "use Decimal". If your only complaint with float or double is the string representation, then just use a smaller precision in sprintf or string.Format or the equivalent in your favorite language. (15 digits in the 'g' format will usually get the job done.)
I have a string with value "111733394601234567094987654321" . Now i want to divide this with 636. I convert it to double , then im getting 1.1173339460123456E+29 . but these both values are differnt finally im
getting wrong output. can anyone help me.....