Sunday, February 25, 2007
Using floating point variables to represent money => not a good idea!
I was reading through some code the other day and was surprised to find that it was using doubles to represent dollar amounts. Reason for the alarm bells is that doubles and floats cannot accurately represent many decimal fractions (eg, 0.1), since doubles and floats internally work with powers of 2 rather than powers of 10. These inaccuracies are likely to lead to significant errors, especially when performing arithmetic (eg, adding up a table of dollar amounts). See this IBM article for a more in depth explanation and examples. The solution is to use types that work with powers of ten internally. In C#, you can use 'decimal' and in Java or Ruby, 'BigDecimal', to avoid these problems.
Subscribe to:
Post Comments (Atom)


4 comments:
Using C#: You wouldn't happen to know a nice way to truncate down from 7 decimal to 4 decimal places for example.
All the Decimal members (in .NET 2.0) add a rounding aspect to any return values or only consider the integer component or round up.
We see the options as:-
1. A small amount of arithmetic to 'construct' the correct output. (E.g. maybe rounding and then 'if' either subtract or add a delta.)
2. Casting to a string and then manipulating and then casting sub strings back.
Neither of the above fell elegant though.
P.S. Great blog, I'll be back to have a bit more of read especially the book reviews.
Cheers
Ryan
Hi Ryan,
You could multiply the number by 10 to the power of the number of decimal places you are interested in, truncate the result and then divide it by the number of decimal places you are interested in. Eg, (x * 10000).truncate() / 10000.
Sorry I missed your comment earlier - Blogger has stopped notifying me of new comments. I've now moved my blog to jamescrisp.org and WordPress.
Cheers,
James
I really like your blog- have to check on it more often. If you are interested in
web-businesses maybe you should have a look at my blog :)
網頁設計,網頁設計公司,最新消息,訪客留言,網站導覽
情趣用品,情趣用品,情趣用品
色情遊戲,寄情築園小遊戲,情色文學,一葉情貼圖片區,情人視訊網,辣妹視訊,情色交友,成人論壇,情色論壇,愛情公寓,情色,舊情人,情色貼圖,色情聊天室,色情小說,做愛,做愛影片,性愛
免費視訊聊天室,aio交友愛情館,愛情公寓,一葉情貼圖片區,情色貼圖,情色文學,色情聊天室,情色小說,情色電影,情色論壇,成人論壇,辣妹視訊,視訊聊天室,情色視訊,免費視訊,免費視訊聊天,視訊交友網,視訊聊天室,視訊美女,視訊交友,視訊交友90739,UT聊天室,聊天室,豆豆聊天室,尋夢園聊天室,聊天室尋夢園,080聊天室,080苗栗人聊天室,女同志聊天室,上班族聊天室,小高聊天室
AV,AV女優
視訊,影音視訊聊天室,視訊交友
視訊,影音視訊聊天室,視訊聊天室,視訊交友,視訊聊天,視訊美女,視訊辣妹,免費視訊聊天室
自慰器,自慰器
Post a Comment