具有数千、数百万和数十亿的问题排序数字(货币)

Posted

技术标签:

【中文标题】具有数千、数百万和数十亿的问题排序数字(货币)【英文标题】:Problem sort numbers (currency )with thousands, millions and billions 【发布时间】:2021-09-03 00:18:57 【问题描述】:

我在按升序和降序对表格进行排序时遇到问题。需要你的帮助!!!我的数字从 0,0000000052€ 到 31.939€。这是我的 tablesort.js,我该如何解决这个问题。我的目标是在单击标题时按升序和降序对表格进行排序。对于所有的帮助,我非常感激。

$(document).ready(function () 
  $('th').each(function (col) 
    $(this).hover(
      function () 
        $(this).addClass('focus');
      ,
      function () 
        $(this).removeClass('focus');
      
    );
    $(this).click(function () 
      if ($(this).is('.asc')) 
        $(this).removeClass('asc');
        $(this).addClass('desc selected');
        sortOrder = -1;
       else 
        $(this).addClass('asc selected');
        $(this).removeClass('desc');
        sortOrder = 1;
      
      $(this).siblings().removeClass('asc selected');
      $(this).siblings().removeClass('desc selected');
      var arrData = $('table').find('tbody >tr:has(td)').get();
      arrData.sort((a, b) => 
        var val1 = $(a).children('td').eq(col).text().toUpperCase();
        parseFloat(val1);

        var val2 = $(b).children('td').eq(col).text().toUpperCase();
        parseFloat(val2);

        if ($.isNumeric(val1) && $.isNumeric(val2))
          return sortOrder == 1 ? val1 - val2 : val2 - val1;
        else return val1 < val2 ? -sortOrder : val1 > val2 ? sortOrder : 0;
      );
      $.each(arrData, function (index, row) 
        $('tbody').append(row);
      );
    );
  );
);

//Example ejs File
<% layout('layouts/boilerplate') -%>

<div class="mdl-grid">
  <div class="mdl-cell mdl-cell--4-col">
    <table
      id="myTable"
      class="mdl-data-table table table-sortable mdl-js-data-table mdl-data-table mdl-shadow"
    >
      <thead>
        <tr>
          <th class="mdl-data-table__header-cell--sorted">Kurs</th>
        </tr>
      </thead>
      <tbody id="coinTable">
        <tr>
          <td class="current_price">0,0000234</td>
        </tr>
        <tr>
          <td class="current_price">9,99</td>
        </tr>
        <tr>
          <td class="current_price">31780,86</td>
        </tr>

        <script src="javascripts/tablesort.js"></script>
      </tbody>
    </table>
  </div>
</div>``

【问题讨论】:

您能否编辑问题以包含您尝试排序的 html 表格,以及列中的一些演示值。 我通过循环从我的 mongodb 中获取数字,但我包含了一个示例表 这行if ($.isNumeric(val1) &amp;&amp; $.isNumeric(val1)) 看起来不正确 另外,您使用的是parseFloat(..),但您不需要将返回值分配给变量吗? 如果您使用的是parseFloat,请注意它需要以美国/西方为中心的语言环境。例如"31393" 为 31,000。 "31.393"(千位分隔符)将为 31 点 3(将 "." 视为小数点),"31,393"(千位分隔符)将为“31”(无法识别逗号)。 【参考方案1】:

好的,谢谢您的帮助。我找到了一种适合我的方法。当然这不是最好的方法,但它工作得很好而且很快。我优化了我的表格排序,这里是我的解决方案。

        var val1 = $(a)
          .children('td')
          .eq(col)
          .text()
          .toUpperCase()
          .replace(/[.]/g, '')
          .replace(/[_]/g, '0.0')
          .replace(/[,]/g, '.');
        var val3 = parseFloat(val1);```

【讨论】:

以上是关于具有数千、数百万和数十亿的问题排序数字(货币)的主要内容,如果未能解决你的问题,请参考以下文章

如何将gridview中的货币四舍五入为有效数字?

谷歌表格将数字格式化为十亿/百万/数千,巧妙地[重复]

在 R 中估计具有数百万个观测值和数千个变量的 OLS 模型

解析双数和数百万

用百万 (M) 和十亿 (B) 后缀格式化数字

马斯克假冒者通过数字货币骗取投资者数百万美元-2021年数字货币骗局总额增长至1亿美元