Ошибка с плавающей запятой при чтении файла Excel из js
Я читаю файл Excel, содержащий десятичные, строковые символы и символы Unicode, когда пользователь загружает его. Я вижу ошибку с плавающей запятой при чтении некоторых десятичных значений (не всех). Например, если число 0,15, оно читается как 0,150000000002. Мне нужно сравнить данные из одного и того же файла Excel, который читается и хранится в БД, с данными, считанными из Excel, чтобы найти разницу в обоих. Я использую xlxs-js, а также пробовал использовать exceljs, но не смог решить проблему.
reader.onload = (e: any) => {
/* read workbook */
const bstr: any = e.target.result;
const wb: XLSX.WorkBook = XLSX.read(bstr, {type: 'buffer'});
/* grab first sheet */
const wsname: string = wb.SheetNames[1];
const ws: XLSX.WorkSheet = wb.Sheets[wsname];
/* save data */
this.data = (XLSX.utils.sheet_to_json(ws, {header: 1}));
console.log(this.data)
};
reader.readAsArrayBuffer(target.files[0]);```
1 ответ
В Javascript есть некоторые проблемы с числами с плавающей запятой.
Например:
0.1 + 0.2
=> 0.30000000000000004
Если все ваши числа с плавающей запятой имеют одинаковое количество десятичных знаков, я бы рекомендовал просто удалить эти цифры с плавающей запятой.
parseFloat((0.1 + 0.2).toFixed(2))
=> 0.3
Это не очень элегантно и не работает, если у вас разное количество десятичных знаков.
Мне понадобится дополнительная информация о том, как выглядит ваш объект this.data, чтобы предоставить вам фрагмент кода для рефакторинга вашего объекта / массива this.data.