Рейтинг:
2
phil.o
Система.Десятичная дробь не может представлять такое значение, как 1.09 E+30. Видеть здесь:
Десятичная Структура[^]
Двоичное представление десятичного значения состоит из 1-битного знака, 96-битного целого числа и коэффициента масштабирования, используемого для деления 96-битного целого числа и указания того, какая его часть является десятичной дробью. Масштабный коэффициент-это неявно число 10, возведенное в степень от 0 до 28. Поэтому двоичное представление десятичного значения имеет вид, ((-2^96 - 2^96) / 10^(0-28)), где -(2^96-1) равно MinValue, а 2^96-1 равно MaxValue.
Вы должны использовать систему.Вместо этого двойной.
double amount;
double.TryParse(ds.Tables[0].Rows[row][col].ToString(), NumberStyles.Any, CultureInfo.InvariantCulture, out amount);
[Редактировать]
Если вы хотите представить значение по-другому, вы должны написать:
string stringRepresentationOfDoubleValue = amount.ToString("#,##0"); // Or whatever format string you need here
Что касается строк числового формата, пожалуйста, обратитесь к:
Строки Настраиваемых Числовых Форматов [
^]
[/Редактировать]
kalaivanan from Bangalore, India
Я попробовал дважды.Метод tryparse(ДС.Таблицы[0]. строки[row][col].ToString (), NumberStyles.Любой, CultureInfo.Инвариантная культура, выходное количество);
он преобразуется 1.09 Е+30 до 1,09 Е+30
Я пытался
двойная сумма = двойная.Синтаксический анализ(ДС.Таблицы[0]. строки[row][col].ToString (), NumberStyles.Поплавок, CultureInfo.Инвариантная культура).Метод toString();
Он преобразовался в 0.
Любой другой тип данных есть, Пожалуйста, скажите мне
phil.o
он преобразовал 1.09 E+30 в 1.09 E+30 =>??
kalaivanan from Bangalore, India
Когда я пытаюсь преобразовать это значение 1.09 E+30, оно возвращает то же самое значение
phil.o
Здесь есть что-то важное, что вы, кажется, упускаете: когда вы читаете 1.09 E+30, это не означает, что компьютер хранит это как строковое значение; то, что вы видите, это представление о реальной ценности, которую компьютер на самом деле хранит и манипулирует. Это просто представляет вы это значение под научной нотацией, просто потому, что 1.09 E+30 гораздо более читабельно, чем 1090000000000000000000000000000.
Ты понимаешь? Преобразовывать нечего, потому что вы путаете значение с его удобочитаемым представлением.
Смотрите мое обновленное решение.
Рейтинг:
2
Zoltán Zörgő
Десятичный[^] не может вместить такое большое число. Попробуй BigInteger[^] вместо.
[Обновление]
Предположим, что числа с плавающей запятой вам не подходят, вам следует поискать пользовательские библиотеки, например BigNumber[^], или GNU BigNum[^].
phil.o
Класс BigInteger содержит целочисленные значения, а не вещественные :)
Хороший выбор-это двойной тип, здесь.
Zoltán Zörgő
Хороший улов. Приведенные примеры выводили меня из себя.
kalaivanan from Bangalore, India
BigInteger доступен только в .NET Framework 4.5
,но я работаю в .NET Framework 3.5, любой другой тип данных должен иметь большее значение.
Zoltán Zörgő
Тоже верно. Чем я предполагаю, что у вас нет встроенного типа для таких больших чисел с фиксированной точкой. Double-это плавающая точка, поэтому она может вам не подойти.
Sergey Alexandrovich Kryukov
5ед.
Кроме того, ОП не понимает, что не существует такого понятия, как "научное обозначение числа".
—СА
Рейтинг:
2
SRKarn
попробуйте это, если возникнут какие-либо проблемы, дайте мне знать..
ToString(doubleVar, System.Глобализация.Числовые стили.Номер)
kalaivanan from Bangalore, India
В .NET Framework 3.5 функция ToString() не принимает никаких параметров
[no name]
Это совершенно неправильно. ToString не может принимать никаких параметров, строковый параметр, параметр IFormatProvider или строку и IFormatProvider.