Импорт ES6 в итерации & amp; не на верхнем уровне [дубликат]

Многие многочисленные дубликаты этого вопроса задают вопрос о влиянии округления с плавающей запятой на конкретные числа. На практике легче понять, как это работает, глядя на точные результаты вычислений, а не просто на чтение. Некоторые языки предоставляют способы сделать это - например, преобразование float или double в BigDecimal в Java.

Так как это вопрос, связанный с языком, ему нужны языковые агностические инструменты, такие как как Десятичный преобразование с плавающей запятой .

Применяя его к числам в вопросе, рассматриваемым как удваивает:

0,1 преобразуется в 0,1000000000000000055511151231257827021181583404541015625,

0,2 преобразуется в 0.200000000000000011102230246251565404236316680908203125,

0,3 конвертируется в 0,29999999999999999989897769753748434595763683319091796875 и

0,30000000000000004 преобразуется в 0,3000000000000000444089209850062616169452667236328125.

Добавление первых двух чисел вручную или в десятичный калькулятор, такой как Full Precision Calculator , показывает точную сумму фактических входов: 0.3000000000000000166533453693773481063544750213623046875.

Если округлить до эквивалента 0,3, ошибка округления будет 0.0000000000000000277555756156289135105907917022705078125. Округление до эквивалента 0,30000000000000004 также дает ошибку округления 0,0000000000000000277555756156289135105907917022705078125.

Возвращаясь к конвертеру с плавающей запятой, необработанный шестнадцатеричный показатель для 0.30000000000000004 равен 3fd3333333333334, который заканчивается четной цифрой и, следовательно, является правильным результатом.

44
задан Enijar 10 March 2016 в 12:22
поделиться

3 ответа

Динамически не удается разрешить ваши зависимости, так как imports предназначены для статического анализа. Однако вы, вероятно, можете использовать некоторые require здесь, например:

for (let foo in bar) {
    if (bar.hasOwnProperty(foo)) {
        const Baz = require(foo).Baz;
    }
}
17
ответ дан Jonathan Petitcolas 24 August 2018 в 04:13
поделиться

Требование не решит вашу проблему, так как это синхронный вызов. Есть несколько вариантов, и все они связаны с

  1. . Запросить модуль, который вам нужен.
  2. Ожидание обещания вернуть модуль

В ECMA Script поддерживается поддержка ленивых модулей загрузки с помощью SystemJS. Это, конечно, не поддерживается во всех браузерах, поэтому вы можете использовать JSPM или системную шину SystemJS.

https://github.com/ModuleLoader/es6-module-loader

1
ответ дан Henrik Vendelbo 24 August 2018 в 04:13
поделиться

Теперь у нас есть предложение динамического импорта с ECMA. Это находится на этапе 2. Это также доступно как babel-preset .

Ниже приведен способ сделать условный рендеринг в соответствии с вашим случаем.

if (foo === bar) {
    import('./Baz')
    .then((Baz) => {
       console.log(Baz.Baz);
    });
}

Это в основном возвращает обещание. Ожидается, что ожидается, что модуль обещания получит модуль. В предложении также есть такие вещи, как множественный динамический импорт, импорт по умолчанию, импорт js-файла и т. Д. Здесь вы можете найти более подробную информацию о динамических импортах здесь .

14
ответ дан thecodejack 24 August 2018 в 04:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: