代码改变世界

javascript 计算

2011-03-04 16:39  惟恐天下不乱哥  阅读(148)  评论(0编辑  收藏  举报

javascript在计算的时候,会产生精度的变化,导致计算的结果并非我们想要得到的值,如下面的代码,实际得到的值,其实不是28.21

   1: var a = "28.22";
   2: var b = "0.01";
   3: var fa = parseFloat(CardBal);
   4: var fb = parseFloat(CancelDepAmt);
   5: var result = fa-fb;

如果通过下面的方法,就能够避免这种情况

   1: function Sub_FloatNumberString(val1,val2)
   2: {
   3: var splitChar = ".";
   4: var sp_val1 = val1.split(splitChar);
   5: var sp_val2 = val2.split(splitChar);
   6: var val1_point;
   7: var val2_point;
   8: if (sp_val1.length==1&&sp_val2.length==1)
   9: {
  10:     return val1 - val2;
  11: }
  12: var more = 0;
  13: if (sp_val1.length == 2 && sp_val2.length == 2)
  14: {
  15:     val1_point = sp_val1[1].length;
  16:     val2_point = sp_val2[1].length;
  17:     more = Math.max(val1_point, val2_point);
  18: }
  19: else if (sp_val1.length > sp_val2.length)
  20: {
  21:     more = sp_val1[1].length;
  22: }
  23: else
  24: {
  25:     more = sp_val2[1].length;
  26: }
  27: var val1Int = parseFloat(val1) * Math.pow(10, more);
  28: var val2Int = parseFloat(val2) * Math.pow(10, more);
  29: var sub = val1Int - val2Int;
  30: return sub / Math.pow(10, more);
  31: }