Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение float в txt файле 
V
    Опции темы
okaton
Дата 6.10.2007, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



Доброго времени суток. Вопрос тупее некуда smile 

У меня есть переменная типа float и она сохраняется в файле, значение в ней получаются иногда целыми. 
И в файле сохраняются без дробной части. Вот мне нужно чтобы например 95 в файле сохранялось как 95.0, как это сделать?
Вот чего я не понимаю так это почему переменная хранится в памяти с дробной частью, а сохраняется без?

PM MAIL   Вверх
mr.DUDA
Дата 6.10.2007, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Код покажите.


--------------------
user posted image
PM MAIL WWW   Вверх
okaton
Дата 6.10.2007, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



Ну например вот такой

Код

StreamWriter zapisTXT = new StreamWriter("1.txt"); 
for (
{
...
zapisTXT.Write(string.Format("{0, 3}", (Math.Round(mass[m, e], 1) + " ")));
...
}


или такой
Код

zapisTXT.WriteLine("фа=" + Math.Round(Out_Data.fa));


все объявляется как float
PM MAIL   Вверх
1stain
Дата 6.10.2007, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 3
Всего: 40



Код

zapisTXT.Write(String.Format("{0:.0}", mass[m, e] ) );


только учти, что сохранит с разделителем целой и дробной частей, который принят в текущей локали. при парсинге текстового файла придецца указать IformatProvider, с которым ты сохранял в текстовый файл. Например, так:

Код

List<float> parsed = new List<float>();
            using (StreamReader reader = new StreamReader("1.txt"))
            {
                float anotherFloat;
                while (!reader.EndOfStream)
                {
                    if( float.TryParse(reader.ReadLine(), System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.CultureInfo.GetCultureInfo("ru-ru"), out anotherFloat) )
                        parsed.Add(anotherFloat);
                }
            }


Это сообщение отредактировал(а) 1stain - 6.10.2007, 15:38


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
okaton
Дата 6.10.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



1stain

А как мне эту запись внедрить вот сюда
Код

zapisTXT.Write(string.Format("{0, 3}", (Math.Round(mass[m, e], 1) + " ")));


zapisTXT.WriteLine("фа=" + Math.Round(Out_Data.fa));// здесь тоже потом будет форматирование


у меня здесь задаются параметры формата строки



PM MAIL   Вверх
okaton
Дата 6.10.2007, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



А все-таки как сделать так чтобы при сохранении в файл .0 не исчезал, ведь он же хранится в памяти глупо было бы его дописывать?
PM MAIL   Вверх
mr.DUDA
Дата 6.10.2007, 23:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232



Можно глупый вопрос: обязательно в текстовый файл сохранять ?


--------------------
user posted image
PM MAIL WWW   Вверх
okaton
Дата 6.10.2007, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



да
PM MAIL   Вверх
tol05
Дата 6.10.2007, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 36
Всего: 170



Код

zapisTXT.Write(string.Format("{0:F2} ", Math.Round(mass[m, e], 1));//пробел внутри строки, после фигурных скобок
zapisTXT.WriteLine(string.Format("фа={0:F2}", Math.Round(Out_Data.fa));




--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
iad
Дата 7.10.2007, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 10.9.2007
Где: Москов

Репутация: 0
Всего: -2



Цитата(tol05 @  7.10.2007,  00:28 Найти цитируемый пост)
zapisTXT.Write(string.Format("{0:F2} ", Math.Round(mass[m, e], 1));
Match.Round это круто. smile  Почитай MSDN про string.Format прежде чем масло масляное советовать. smile 

PM MAIL   Вверх
tol05
Дата 7.10.2007, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 36
Всего: 170



Цитата(iad @  7.10.2007,  20:53 Найти цитируемый пост)
Match.Round это круто. smile  Почитай MSDN про string.Format прежде чем масло масляное советовать. smile 
это мне?

Почитал. Ну и что?
Цитата

public static double Round (double value, int digits)

iad, я предложил указать конкретный вариант форматирования числа. Что-то не так?


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
iad
Дата 8.10.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 10.9.2007
Где: Москов

Репутация: 0
Всего: -2



Цитата(tol05 @  7.10.2007,  22:40 Найти цитируемый пост)
Что-то не так?
Format прекрасно справляется с округлением до нужного знака и использование Math.Round здесь как корове седло

PM MAIL   Вверх
okaton
Дата 8.10.2007, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 24.11.2006

Репутация: нет
Всего: нет



iad,  Сначало я округлял Math.Round, потому что мне нужно было округлить.
Потом мне посоветовали string.Format для форматирования данных в сохраняемом файле, про то что он прекрасно справляется с округлением до нужного знака я не знал (кстати узнал только что от вас). MSDN я читал, но видимо от меня что-то ускользнуло.


Всем спасибо за советы, вчера инета не было, а проект нужно было сдавать.
Понять в чем дело я не смог, пришлось обработчик писать на нулевую дробную часть и дописывать (,0 ).
Хоть и результат тот же, но для себя я считаю что это неправильный путь решения:(

PM MAIL   Вверх
1stain
Дата 8.10.2007, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 3
Всего: 40



Цитата(okaton @  8.10.2007,  10:15 Найти цитируемый пост)
Понять в чем дело я не смог, пришлось обработчик писать на нулевую дробную часть и дописывать (,0 ).

 smile 
жаль нету смайла "suicide"

вот запись элементов массива в текстовый файл с пробелами и прочей чепухой
Код

            Random rnd = new Random();
            float[,] farray = new float[10,10];
            for (int i = 0; i < farray.GetLength(0); ++i)
            {
                for (int j = 0; j < farray.GetLength(1); ++j)
                {
                    farray[i, j] = (float)(rnd.NextDouble() * 100);
                }
            }

            using (StreamWriter writer = new StreamWriter("1.txt"))
            {
                for (int i = 0; i < farray.GetLength(0); ++i )
                {
                    for (int j = 0; j < farray.GetLength(1); ++j)
                    {
                        writer.Write(String.Format("{0,-10:.0} ", farray[i, j]));
                    }
                    writer.WriteLine();
                }
            }


так, как используется Math.Round() у тебя, нет никакой разницы с отбрасыванием "лишних" знаков после запятой, которое делает String.Format. Зато выполняется лишняя работа - сначала округляем через Math.Round(), а потом все равно вызываем String.Format()

Это сообщение отредактировал(а) 1stain - 8.10.2007, 11:14


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
mr.DUDA
Дата 8.10.2007, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 8
Всего: 232




M
mr.DUDA
1stain, спокойнее плз.



--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1182 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.