У нас есть приложение VB.Net использует следующее выражение:VB.Net аномального преобразование в строку
CStr(CDbl(Now.ToOADate()))
(код был перенесен из VB6.) Я проверил это несколько часов назад она оценивается/визуализируются как «42026.786202581» точно так, как должно. Но есть небольшое количество случаев (я могу сказать по данным), которое оно отображает как «42026.786202581E + 15».
Это, конечно, очень неправильный результат, целая часть - это количество дней с 01.01.1900 года, а 42K - рациональное значение, его не нужно умножать ни на что (забудьте 10^15!)
Вы, возможно, заметили, что он использует совместимость VB6, старые функции типа принуждении, я изменил его:
Convert.ToDouble(Now.ToOADate()).ToString()
Но я не мог воспроизвести его в лаборатории в любом случае, так что выход без изменений, как и ожидалось ... Бинарный формат OADate на самом деле идентичен двойному поплавку, должен быть без проблем, поскольку конверсии идут ...
Подводя итог, я даже не могу представить, как такое простое выражение может быть отключено на 15 порядков! Любое понимание было оценено.
ТИА
Вызов CDbl избыточен. Метод «ToOADate» уже возвращает double. Почему вы конвертируете его в строку? –
Если вы конвертируете OADate в строку, он отображает строку даты и времени, вам нужно преобразовать/сделать двойным, чтобы отобразить строку с плавающей точкой. –
Строка используется как uniquifier - я знаю, я знаю, вместо этого используйте GUID. Я просто пытаюсь понять, как возникла проблема как проявленная. –