Преобразование float в string

I want to convert float value to string.

Below is the code which i am using for the conversion.

and it outputs as 2.5

But my problem is i want to get the value as 2.50 because i want to compare it with original value later in my project.

so please suggest me if there are any ways to do it?

3 Answers 3

You should be using <0:N2>to format to two decimal places.

For 3 decimal places:

You can also store the value in a string this way without worrying about precision and then convert your value where you are testing for comparison as string:

because i want to compare it with original value later in my project.

. then you will need to store the number of decimal places the original value had. Once the value is a float, this information is lost. The float representations of 2.5 , 2.50 and 2.500 are exactly the same.

So, basically, you have the following possibilities (in order of preference):

  • Don’t do a string comparison between the old and the new value. Convert both values to float and then compare them (with a margin of error since floats are not precise).
  • Store the number of decimal places of the old value and then use myFloat.ToString("F" + numDecimals.ToString()) to convert it to a string.
  • Store the value as a string instead of a float. Obviously, you won’t be able to do math on that value.

Alternatively, if you do not insist on using floats, decimals might suit your purpose: The do store the number of significant digits:

Читайте также  Разобрать слово лес по звукам и буквам

как я могу преобразовать целое число с плавающей запятой в строку в C/C++ без библиотек функция sprintf ?

Я ищу функцию, например, char *ftoa(float num) , который преобразует num в строку и возвращает ее.

ftoa(3.1415) должен возвратить "3.1415" .

8 ответов

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

но есть ответ и это моя попытка ее реализации. Здесь я использовал значение допуска, так что вы не вычисляйте слишком много десятичных знаков, что приводит к бесконечному циклу. Я уверен, что могут быть лучшие решения, но это должно помочь вам хорошо понять, как это сделать.

основываясь на ответе Софи пал, это немного более полное решение, которое учитывает число ноль, NaN, бесконечные, отрицательные числа и научную нотацию. Хотя команду по-прежнему обеспечивает более точное строковое представление.

  1. printf: 0, dtoa: 0
  2. printf: 42, dtoa: 42
  3. printf: 1234567.8901234, dtoa: 1234567.89012344996444
  4. printf: 1.8 e-14, dtoa: 1.7999999999999999 e-14
  5. printf: 555555.5555555556, dtoa: 555555.55555555550381
  6. printf: -8.88888888888889 e+14, dtoa: -8.888888888888888 e + 14
  7. printf: 1.111111111111111 e+23, dtoa: 1.11111111111111 e+23
  1. использовать log -функция, чтобы узнать величину m в свой номер. Если величина отрицательная, выведите "0." и соответствующее количество нулей.
  2. последовательно делить на 10^m и привести результат к int, чтобы получить десятичные цифры. m— для следующей цифры.
  3. если вы пришли accross m==0 не забудьте распечатать десятичной точки "." .
  4. прерваться через пару цифр. Если m>0 когда вы сломать, не забудьте распечатать "E" и itoa(m) .
Читайте также  С рабочего стола пропала корзина как вернуть

вместо log -функция вы также можете напрямую извлечь показатель путем битового смещения и коррекции смещения показателя (см. IEEE 754). Java имеет функцию double-to-bits для получения двоичного представления.

у вас есть две основные проблемы:

  1. преобразовать число в строку символов
  2. выделение достаточного объема памяти для хранения символов.

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

у вас есть два набора инструментов доступно для решения числовой части задачи: прямая битовая манипуляция (маскировка, сдвиг и т. д.) и арифметическая операция ( * ,+,/, плюс, возможно, математические функции link log() ).

в принципе вы могли бы заняться побитовым представлением напрямую, но это не было бы переносимо в случае изменения форматов представления с плавающей запятой в будущем. The метод, предложенный Эдгаром.holleis должен быть портативным.

вот что я придумал; это очень эффективно и очень просто. Предполагается, что ваша система имеет itoa .

Как вы можете конвертировать строку 6.78 в число с плавающей точкой?
Как вы можете преобразовать число с плавающей запятой 7,89 в строку?

На оба эти вопроса есть похожие ответы?

Решение

В стандартной библиотеке у тебя есть

Другие решения

Я согласен с А.Е. Дрю, он отлично работает
Вы также можете использовать лексическое приведение для повышения, если у вас установлено повышение.
Вот пример, который я нашел.

Я также обнаружил, что этот вопрос уже задавался, поэтому вы можете получить полный ответ здесь:

Какова ваша среда?

Если это Visual Studio и Windows, используйте atoi () и itoa ().

Ссылка на основную публикацию
Adblock
detector