Как из float сделать string c
Перейти к содержимому

Как из float сделать string c

  • автор:

Как из float сделать string c

Нравится ресурс?

Правила раздела Visual C++ / MFC / WTL (далее Раздела)

1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.

Преобразование Float в String в C#

В этой статье мы напишем программу в C# для преобразования Float в String с использованием метода float.ToString().

class Program < static void Main(string[] args) < float flt1 = 37.33f; float flt2 = 49.29f; string str1 = flt1.ToString(); string str2 = flt2.ToString(); Console.WriteLine(str1 +" " + str2); Console.ReadLine(); >>

(Пока оценок нет)

Похожие новости

Размер шрифта, чтобы он соответствовал обернутой этикетке в C#
Порог цвета к изображению в C#
Отобразить диалоговые формы многократного использования в C#
  • Книги по 1С
  • Книги по Assembler
  • Книги по Android
  • Книги по C#
  • Книги по C++
  • Книги по CSS
  • Книги по Delphi
  • Книги по HTML
  • Книги по JavaScript
  • Книги по Java
  • Книги по MySql
  • Книги по Php
  • Книги по Python
  • Книги по Pascal

Как из float сделать string c

AD>ЗЫ: правда получишь жуткие тормоза.

из-за чего?
(я хочу это использовать для генерации sql запросов)

Re[3]: Как правильно преобразовать float в string

От: ArtDenis
Дата: 01.05.03 13:43
Оценка: 2 (1)

Здравствуйте, AI, Вы писали:

AD>>ЗЫ: правда получишь жуткие тормоза.
AI>из-за чего?

#include #include const count = 10000; void test1() < std::string str; std::ostringstream tmp; int i; float value = 11.765765; for (i = 0; i < count; i++) < tmp.clear(); tmp > void test2() < std::string str; char buffer[64]; int i; float value = 11.765765; for (i = 0; i < count; i++) < sprintf(buffer, "%f", value); str = buffer; > >

Так вот test1 у меня отрабатывает за 2.7 секунд, test2 — за 0.025. Комментарии, я думаю, излишни.

AI>(я хочу это использовать для генерации sql запросов)

Для этого — в самый раз. Тем более, что ostringstream может растягиваться до любых (почти) размеров.

Re[4]: Как правильно преобразовать float в string

От: КАА
Дата: 01.05.03 15:06
Оценка:

Как насчет _gcvt() .
Все будет Украина!
Re: Как правильно преобразовать float в string

От: WFrag
Дата: 01.05.03 15:09
Оценка: 21 (2)

Здравствуйте, AI, Вы писали:

AI>я делаю так
AI>char cstring[10];
AI>float a=80.01;
AI>sprintf(cstring,»%f»,a);
AI>std::string str=»»+cstring+»»;
AI>———————————
AI>как правильно сделать
AI>а вот ещё так бы хотелось
AI>vector v(10);
AI>———————————

А еще можно c помощью boost:

string str = lexical_cast( 1.2345f );

Re[5]: Как правильно преобразовать float в string

От: ArtDenis
Дата: 01.05.03 15:24
Оценка:

Здравствуйте, КАА, Вы писали:

КАА>Как насчет _gcvt() .

А так же fcvt, ecvt. Каждый вибирает для себя наиболее удобный вариант. Все сишные реализации небезопасны с точки зрения вероятности записи за пределы буфера, зато они очень быстро работают. С ostringstream всё наоборот — он безопасен и многофункционален, но работает медленно.

Re[4]: Как правильно преобразовать float в string

От: Михаил Можаев www.mozhay.chat.ru
Дата: 01.05.03 23:48
Оценка: 6 (1)

Здравствуйте, ArtDenis, Вы писали:

AD>>>ЗЫ: правда получишь жуткие тормоза.
AD>Так вот test1 у меня отрабатывает за 2.7 секунд, test2 — за 0.025. Комментарии, я думаю, излишни.

А зачем так хитро? Попробуй так:

void test1() < std::string str; int i; float value = 11.765765; for (i = 0; i < count; i++) < std::ostringstream tmp; tmp >

И все уже не так плохо

Re[5]: Как правильно преобразовать float в string

От: ArtDenis
Дата: 02.05.03 05:59
Оценка:

Здравствуйте, Михаил Можаев, Вы писали:

ММ>

ММ>void test1() ММ> < ММ>std::string str; ММ> int i; ММ> float value = 11.765765; ММ> for (i = 0; i < count; i++) ММ> < ММ>std::ostringstream tmp; ММ> tmp str = tmp.str(); ММ> > ММ>> ММ>

ММ>И все уже не так плохо

В полтора раза быстрее

Re[2]: Как правильно преобразовать float в string

От: ArtDenis
Дата: 02.05.03 07:26
Оценка:

Здравствуйте, WFrag, Вы писали:

WF>А еще можно c помощью boost:
WF>

WF>string str = lexical_cast( 1.2345f ); WF>

2.3 секунды с lexical_cast против секунд 0.025 с sprintf

Re[3]: Как правильно преобразовать float в string

От: WFrag
Дата: 02.05.03 11:34
Оценка:

Здравствуйте, ArtDenis, Вы писали:

AD>Здравствуйте, WFrag, Вы писали:

WF>>А еще можно c помощью boost:
WF>>

WF>>string str = lexical_cast( 1.2345f ); WF>>

AD>2.3 секунды с lexical_cast против секунд 0.025 с sprintf

AD>Денис.
Ну lexical_cast<> собственно вот по такому принципу и работает :

float a = 80.01; std::string str; std::stringstream tmp; tmp 

Re[4]: Как правильно преобразовать float в string

От: AI
Дата: 02.05.03 13:56
Оценка:

Cпасибо всем . я остановился на потоке ostringstream /
но у меня почему не дейтсует
tmp.clear();
то есть просиходит процесс добавления. пришлось каждый раз создавать новый

Re[5]: Как правильно преобразовать float в string

От: Павел Кузнецов
Дата: 02.05.03 14:26
Оценка: 12 (1)

Здравствуйте, AI, Вы писали:

A> остановился на потоке ostringstream /
A> но у меня почему не дейтсует tmp.clear();

tmp.clear() вместо ожидаемой тобой "очистки содержимого" просто-напросто сбрасывает флаг состояния. Используй

tmp.str(std::string());

Как конвертировать float/double в строку именно в том виде, в котором значение устновленно в переменной (без обрезки занков)?

Выводит "0.01234567", а надо "0.012345678900000". stringstream пробовал - результат тот же. std::to_string вообще 6 знаков пишет после точки. Точность заранее не известна, нужно выгружать в строку то, что есть, можно без нулей в конце. Как это сделать?

Отслеживать
задан 8 мая 2020 в 18:27
2,273 1 1 золотой знак 17 17 серебряных знаков 27 27 бронзовых знаков
А вы не задумывались, какова точность представления числа типом float ?
8 мая 2020 в 18:29
@Harry с double картина не меняется
8 мая 2020 в 18:31
Ну, вы вообще бредом занимаетесь - в пустой string что-то писать.
8 мая 2020 в 18:35

Ну, конкретное количество нулей справа - это вы никак не получите. У гугла есть библиотека, которая печататет числа с плавающей точкой за минимальное количество знаков, возможно это вам подойдет. (По идее, std::to_chars тоже должна так уметь, но пока ее завезли только в MSVC.)

8 мая 2020 в 18:58

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

float valf = 0.012345678900100; double vald = 0.012345678900100; printf("%.20f\n", valf); printf("%.20lf\n", vald); 
0.01234567910432815552 0.01234567890010000030 

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

char buf[30]; sprintf(buf,"%.20lf",val); string s = buf; 
ostringstream os; os  

Только не пишите в никуда, как в вашем примере.

Update

К "артефактам", упомянутым в комментарии. Это не артефакты. Представим, что у нас есть возможность записи только 4 бит. Как вы представите, например, 1/5 в виде суммы дробей вида 1/2 n ?

1/8 + 1/16 + 1/128. Стоп! Уже не можем представить 1/128 - точности не хватает. Так что число 0.20 будет иметь вид 0.1875.

Это - ограничение самого представления. Ну невозможно в общем случае представить дробное число с помощью конечной суммы дробей вида 1/2 n .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *