【问题标题】:parseInt on currency field returns NaN货币字段上的 parseInt 返回 NaN
【发布时间】:2012-07-30 11:42:01
【问题描述】:

我在 php/mysql 中有一个动态表,我通过复选框显示/隐藏列。下面代码的 sn-p 是隐藏和重新计算总列的单元格值的 javascript 的一部分。

function toggleVis(button) { 
// Toggle column 
cells = $$('.t'+button.name); 
cells.invoke(button.checked ? 'show' : 'hide'); 

// Recaulculate total 
$$('tr.row').each(function(row) { 
// Initialise to zero 
var total = 0; 
row.down('.total').textContent = total; 

// Sum all visible cells 
row.select('td').each(function(cell) { 
total += cell.visible() ? parseInt(cell.textContent, 10) : 0;
}); 

// Write the total in the total cell 
row.down('.total').textContent = total; 
}); 
}

当表格内容只是数字时,这很有效,但我现在需要创建另一个包含货币值的表格。这会导致总列返回 NaN 大概是由于 £ 符号。我在 php 中使用以下代码对其进行格式化:

     <tbody>
  <?php do { ?>
    <tr>
      <td><?php echo $row_rsMISource['Source']; ?></td>
      <td><?php echo "£".number_format($row_rsMISource['May'], 2, '.', ','); ?></td>
      <td><?php echo "£".number_format($row_rsMISource['Jun'], 2, '.', ','); ?></td>
      <td><?php echo "£".number_format($row_rsMISource['Jul'], 2, '.', ','); ?></td>
      <td><?php echo "£".number_format($row_rsMISource['Aug'], 2, '.', ','); ?></td>
      <td><?php echo "£".number_format($row_rsMISource['Total'], 2, '.', ','); ?></td>
      </tr>
    <?php } while ($row_rsMISource = mysql_fetch_assoc($rsMISource)); ?>
    </tbody>

这会输出诸如 £10,169.62、£7,053.00 或 £.0.00 之类的值

是否可以在仍然使用上面发布的 js 的同时将单元格格式化为货币?

【问题讨论】:

  • 能否请您发布您的 PHP 生成的 td 元素的结构? JavaScript 适用于 HTML,PHP 脚本本身在很大程度上与 JavaScript 问题无关。
  • @DavidThomas - 已更新代码以反映表结构和输出......

标签: php javascript


【解决方案1】:
4 + '£4'; //NaN
4 + parseFloat('£4.3'.replace(/[^\d\.]/g, '')); //8.3

这会从字符串中删除非数字字符,并将字符串强制转换为数字(因此您会得到 8.3,而不是 "44.3")。

如果您所在的国家/地区使用逗号而不是句点作为小数分隔符,请将\. 替换为,

[编辑 - 对于您的具体示例:]

row.find('td').each(function() { 
    total += $(this).is(':visible') ? parseFloat($(this).text().replace(/[^\d\.]/g, '')) : 0;
});

那里有很多代码更改。

【讨论】:

  • 感谢@Utkanos,感谢您的意见,您可能知道我缺乏任何 JS 知识,我尝试添加 total += cell.visible() ? parseFloat(cell.textContent.replace(/[^\d\.]/g, ''));对我的 js 代码毫无兴趣,这是正确的做法吗?
  • 再次感谢您的帮助和时间。我尝试将代码插入到我的 js 中,页面运行良好,但是当列被删除时,总列不再更新。以前,当我单击隐藏列时,总计列会更新为仅对可见的行求和?这有意义吗?
  • 好吧,我将您的select() 更改为find()(因为select() 并没有像您认为的那样做)。你能设置一个 JSFiddle 来说明这个问题吗?
  • 您好,再次感谢。已在此处放置代码jsfiddle.net/CvuxN 与我的页面不太一样,但这就是它的作用; 1. 用户取消选中框 2nd Quarter,这会隐藏 May 和 June 列,然后总结剩余的行。一切都很好,直到我在 php 中格式化单元格以输出英镑货币?再次感谢
  • 我必须添加单元格值而不是从数据库中提取,因此货币格式也被删除了。
猜你喜欢
  • 2016-05-20
  • 2012-04-28
  • 1970-01-01
  • 2014-11-16
  • 2018-01-09
  • 1970-01-01
  • 2022-11-18
  • 2018-10-01
  • 1970-01-01
相关资源
最近更新 更多