VB.NET - Преобразование строки в двойную и обратно - PullRequest
1 голос
/ 24 февраля 2012

Я сохраняю значение (изначально представленное в виде строки), например, - 12345678901234.12345678912 - в двойной переменной.После сохранения он представляется в экспоненциальном формате (с символом e).Как мне преобразовать это экспоненциальное представление в исходное (строковое) представление?

Dim s as string = "1234567891234567.123456789"
Dim d as Double
Double.TryParse(s, d)
Console.WriteLine(d) 'Prints 1.23456789123457E+15

Использование десятичного числа решает проблему, но почему нельзя Double сделать это?

1 Ответ

2 голосов
/ 24 февраля 2012

Ваша строка содержит 25 значащих цифр. double просто не сохраняет такой объем информации. Даже decimal едва может удерживать столько (28/29 цифр). Из документов на System.Double:

По умолчанию значение Double содержит 15 десятичных цифр точности, хотя внутренне поддерживается максимум 17 цифр.

Вы должны прочитать мои статьи о двоичной с плавающей запятой и десятичной с плавающей запятой для получения дополнительной информации - они приходят к теме с точки зрения C #, но вы, очевидно, используете те же типы от VB.

В вашем конкретном случае значение точное double, наиболее близкое к 1234567891234567.123456789, равно всего 1234567891234567 - вы теряете все информацию после десятичной точки.

...