Excel VBA - десятичное число в строковом типе данных с большим количеством десятичных знаков, всегда интерпретируемых как большое целое число (проблема с региональным десятичным разделителем) - PullRequest
0 голосов
/ 29 ноября 2018

Справочная информация: Я получаю данные для своего приложения Excel из API в формате json.В связи с этим я получаю числовые значения в виде строки, так как все, что отправлено в json, естественно, представляет собой текстовый формат - и VBA также интерпретирует его.Поскольку я нахожусь в Дании, использую другой десятичный разделитель, чем встроенный в Excel (моя датская версия использует , в качестве разделителя, а не .).

Случай: Это вызывает немало проблем, так как Excel интерпретирует это как разделитель тысяч при преобразовании строки в число.

Поиск ответов I 'мы обнаружили, что, как правило, лучшее решение - преобразовать строку в удвоенную при использовании VBA, используя CDbl(string to convert to number).

Обычно это так, но в моем случае я получаю число с большим количеством десятичных знаков, например: "9.300000190734863".

При выполнении CDbl("9.300000190734863") это приводит кв очень большом целом числе: 9,30000019073486E+15

Кроме того, я не думаю, что использование подхода replace() возможно в моем случае, так как у меня также могут быть данные, которые используют как десятичные, так и тысячи разделителей одновременно,что делает мои результаты подверженными ошибкам при замене.

Однако при вставке строкового значения непосредственно в ячейку в Excel число корректно преобразуется в 9,30000019073486 в моем случае.

Вопрос: Может ли быть правильным, что нет способа имитировать или использовать эту функциональность, которую Excel, очевидно, использует при вставке строки в ячейку?

Я уже довольно долго искал, и не нашел другого решения, кроме очевидного: вставка значения в ячейку.Проблема здесь в том, что это дает мне некоторые потери производительности, которых я бы предпочел избежать.

1 Ответ

0 голосов
/ 29 ноября 2018

Вы можете поменять местами точки и запятые на входе до двойного преобразования, выполнив три шага:

  1. Замените запятые на 'X' (или другое выигравшее значение)t появляются в ваших данных)
  2. Заменить точки запятыми
  3. Заменить 'X' точками
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...