﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Mosquito323</title><link>http://www.blogjava.net/Mosquito323/</link><description /><language>zh-cn</language><lastBuildDate>Thu, 07 May 2026 09:00:41 GMT</lastBuildDate><pubDate>Thu, 07 May 2026 09:00:41 GMT</pubDate><ttl>60</ttl><item><title>parseFloat的精度问题</title><link>http://www.blogjava.net/Mosquito323/archive/2009/01/10/250819.html</link><dc:creator>NWU紫气东来</dc:creator><author>NWU紫气东来</author><pubDate>Sat, 10 Jan 2009 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/Mosquito323/archive/2009/01/10/250819.html</guid><wfw:comment>http://www.blogjava.net/Mosquito323/comments/250819.html</wfw:comment><comments>http://www.blogjava.net/Mosquito323/archive/2009/01/10/250819.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Mosquito323/comments/commentRss/250819.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Mosquito323/services/trackbacks/250819.html</trackback:ping><description><![CDATA[<p>写js时遇到的问题，已经解决，做笔记<br />
<br />
在js中进行以元为单位进行金额计算时 使用parseFloat会产生精度问题<br />
</p>
<p>var price = 10.99;<br />
var <span class="sourceRowText">quantity</span> = 7;<br />
var needPay = parseFloat(price * quantity);<br />
<br />
needPay的正确结果应该是76.93元&nbsp; 但是运行后发现needPay为<span class="objectBox objectBox-number">76.93000000000001</span>&nbsp;<br />
此情况可通过 toFixed(n)&nbsp; 方法修正 但是这个方法对 js版本要求较高 不能兼容ie5<br />
<br />
另一个解决方案是： 将元为单位的金额乘以100换算为分进行计算<br />
<br />
var price = 10.99<br />
var quantity = 7<br />
var needPay = Math.floor(parseFloat(price*100 * quantity))/100;<br />
<br />
parseFloat(price*100 * quantity)的计算结果是<span class="objectBox objectBox-number">7693.000000000001</span>&nbsp;&nbsp; 使用Math.round()方法四舍五入，再除100&nbsp; 即为正确的结果<br />
<br />
PS：顺便学到了一点：Math.ceil() Math.floor() Math.round() 的区别<br />
Math.ceil() 是向上取整<br />
Math.floor()是向下取整<br />
Math.round()是四舍五入<br />
</p>
<img src ="http://www.blogjava.net/Mosquito323/aggbug/250819.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Mosquito323/" target="_blank">NWU紫气东来</a> 2009-01-10 17:11 <a href="http://www.blogjava.net/Mosquito323/archive/2009/01/10/250819.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>