Количество цифр в числах Double

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

haster
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 03.11.2012 (Сб) 16:47

Количество цифр в числах Double

Сообщение haster » 03.11.2012 (Сб) 17:04

Мне нужно сохранять числа типа Double в файл. Но при сохранении первоначальное число автоматически сокращается, например, первоначальное число- Dim c1 As Double = 123123.65456465152, а в файл сохраняется 123123654564.65152, 2 цифры потеряны или того хуже, первоначальное число -0.0000000673972095910358, а сохраняется как -6,73972095910358E-08, E-08, что вообще для моей задачи недопустимо. Как же сохранять числа точно такими же, как они и были? Или для иррациональных чисел хотя бы задавать конкретное количество символов после запятой.

И еще хочу узнать насчет ввода значений чисел double в исходный текст программы - можно ли как-нибудь регулировать количество возможных для ввода цифр числа, а то если я ввожу число 12245654321.1324654651324655465, то оно автоматически укорачивается до 12245654321.132465

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Количество цифр в числах Double

Сообщение Admiralisimys » 03.11.2012 (Сб) 17:55

haster использовать метод ToString() с параметром "R", так числовое представление Double будет полностью сохранено http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
Код: Выделить всё
Imports System

Class Program
    <STAThread()> Public Shared Sub Main()
        Dim c1 As Double = 123123.65456465152
        'Console.WriteLine(c1.ToString("R"))

        Dim fs As New IO.FileStream("123.txt", IO.FileMode.Create, IO.FileAccess.Write)
        Dim sw As New IO.StreamWriter(fs)
        sw.Write(c1.ToString("R"))
        sw.Close()
        fs.Close()
    End Sub
End Class

haster
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 03.11.2012 (Сб) 16:47

Re: Количество цифр в числах Double

Сообщение haster » 03.11.2012 (Сб) 19:24

Спасибо, почти помогло :D

При этом все равно появлялись числа с E-08, поэтому пришлось применить "F" вместо "R". Так сохраняются лишние цифры (например вместо 0 - 0.0000), может можно как-то и это обойти попроще?

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Количество цифр в числах Double

Сообщение Admiralisimys » 03.11.2012 (Сб) 23:08

haster в том же к описании к The Fixed-Point ("F") Format Specifier есть примеры как регулировать количество знаков после запятой.

haster
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 03.11.2012 (Сб) 16:47

Re: Количество цифр в числах Double

Сообщение haster » 04.11.2012 (Вс) 10:32

Admiralisimys писал(а):есть примеры как регулировать количество знаков после запятой


Это все понятно, только при The Fixed-Point ("F") Format Specifier нужно указывать конкретное количество знаков, а чтобы их указать нужно сначала отдельно выяснять сколько знаком в данном случае нужно (примеры с лишними нулями: 0.00115000, 0.000000 и т.д.). Пока в голову приходит только использовать регулярные выражения или TrimEnd, а потом еще проверять наличие точки. Наверно как-то так и сделаю, хоть это и не очень красиво.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.11.2012 (Вс) 11:13

А зачем тебе это вообще надо? И об использовани Decimal ты не задумывался?

haster
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 03.11.2012 (Сб) 16:47

Re: Количество цифр в числах Double

Сообщение haster » 04.11.2012 (Вс) 14:06

Qwertiy писал(а):об использовани Decimal ты не задумывался?


Действительно, если преобразовать CDec(c1) и сохранить, то все получается как надо.

Всем спасибо за помощь !

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 04.11.2012 (Вс) 21:10

Зачем тебе это вообще надо?


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 36

    TopList