Javascript: Как преобразовать числа с плавающей точкой в ​​формате engli sh в числа с плавающей точкой в ​​испанском формате sh? - PullRequest
2 голосов
/ 14 марта 2020

Для построения таблиц моего сайта с помощью activ я использую «response- bootstrap -table-next». С помощью этой библиотеки я могу строить таблицы динамически и упорядочивать без проблем, если числа целые или плавающие в формате engli sh.

Но, если я попытаюсь упорядочить таблицу по столбцу с числами с плавающей точкой в ​​испанском sh формат, сортировка не правильная. Это происходит потому, что формат чисел с плавающей запятой в javascript представлен в формате engli sh, поэтому для отображения этих значений на экране мне необходимо преобразовать число с плавающей запятой в строку, а затем изменить «.» per ",".

В Spani sh мы отделяем десятичную часть с запятой, а не с точкой. Например, 12,95 (формат engli sh) === 12,95 (формат Spani sh)

Итак, если я попытаюсь отсортировать таблицу по столбцу DRE по убыванию, как вы можете смотрите на следующем изображении, сортировка не правильная. Поскольку данные на самом деле являются строками, а не числами с плавающей точкой из-за изменений, которые я должен сделать с ними.

Следовательно, есть ли способ преобразовать числа с плавающей запятой в формате engli sh в числа с плавающей запятой в испанском sh формат? Или есть способ заказать столбец в зависимости от значения другого? Например, я могу добавить в таблицу один и тот же столбец, но дважды. Один раз в формате engli sh, а другой в испанском sh. Столбец с форматом engli sh не будет виден, но столбец с форматом испанского sh будет. И этот столбец будет отсортирован в зависимости от столбца в формате engli sh.

Есть ли способ сделать это? Или какой-нибудь другой вариант?

enter image description here

Редактировать I

Благодаря @Uby я могу сортировать таблицу, но не всегда выполняю сортировку хорошо.

Моя функция сортировки:

sortFunc: (a, b, order) => {
    if (order === 'asc') {
        return parseFloat(a) - parseFloat(b);
    }
    return parseFloat(b) - parseFloat(a); // desc
},

Но сортировка таблицы по возрастанию или убыванию не всегда происходит правильно: S

enter image description here enter image description here

Я что-то не так делаю? Я не понимаю, что случилось.

Ответы [ 2 ]

2 голосов
/ 14 марта 2020

Поскольку вы используете react-bootstrap-table-next, вы можете попробовать написать свою собственную функцию сортировки. Вот документы .

Вы должны проанализировать содержимое ячейки как разметку (замена запятой на точку), а затем выполнить сравнение с плавающей запятой.

1 голос
/ 14 марта 2020

Вы можете определить пользовательскую функцию сортировки , где вы самостоятельно анализируете Float и добавляете ее в определение столбца следующим образом:

{
  // omitted...
  sort: true,
  sortFunc: (a, b, order, dataField, rowA, rowB) => {
      let fA = parseFloat(a.replace(',','.'));
      let fB = parseFloat(b.replace(',','.'));

      if (order === 'asc') {
          return fB - fA;
      }
      return fA - fB; // desc
}
...