2015-02-22 3 views
-1

В моем назначении я должен взять строковый клапан и превратить его в поплавок , напримерпреобразование строки плавать с Precission 2 (25.00) в C++

100 будут 100,00

100,0112 будет недействительным

100,99 останется, как это

99 будет 99,00

Я м думал об использовании «Stof», но им застрял о том, как установить точность 2

+0

Под «float», вы имеете в виду, например, C++-тип 'float' или просто какое-либо (десятичное?) Представление фракций вообще? –

+0

@sam Если '100.00112' недействительно, какое число преобразуется, чтобы сделать это действительным? – PaulMcKenzie

+1

@sam Затем, прежде чем преобразовать его в float, вам нужно взять строку и узнать, вводит ли пользователь более двух значений после десятичной точки. Вы не хотите попасть в сорняки первого преобразования в float, а затем попытаться определить, имеет ли float две десятичные цифры. Плавающая точка не является точной, и как только вы преобразуете число в плавающую точку, вы в основном застряли с этим номером. – PaulMcKenzie

ответ

1

проверки ввода

Для проверки ввода, является ли действительным или нет, вы можете просто соответствовать его с регулярным выражением, как

  • ^([1-9][0-9]*|0)(\.[0-9]{0,2})?$ (если вы не позволяют ведущие нули, кроме чисел строго между -1,0 и 1,0) или
  • ^[0-9]+(\.[0-9]{0,2})?$ (если позволяют ведущие нули) или
  • ^[0-9]*(\.[0-9]{0,2})?$ (если вы позволите написать 0.31 как только .31 и разрешить начальные нули).

Числа для расчета

Если вы должны делать какие-либо вычисления по номерам кодируемых в строке, и если не трудно требование использовать C++ тип float рекомендуется использовать тип с фиксированной точкой. Двоичные типы с плавающей запятой (даже double) не могут точно представлять множество десятичных дробей (даже если последние ограничены двумя десятичными знаками после точки).

Numbers для вывода текста

Если вам просто нужно отобразить/напечатать число закодированного в строках в формате с двумя знаками после запятой, у вас есть несколько вариантов:

  • После прошедшего проверки, преобразовать строки в формат с плавающей запятой, например с stof или stod. Затем просто output it with the wanted precision. Точность double обычно должна быть достаточной, чтобы вернуть исходное десятичное значение, если числа невелики.

    или

  • После того, как прошли проверку, преобразование строки в формат с фиксированной точкой, и выводом этого.

    или

  • никогда фактически не конвертировать в число, вместо того, чтобы произвести разыскиваемый вывод по манипуляции со строками. В зависимости от того, как вы это делаете, он также может позаботиться о проверке. Если это не так, сделайте это только после проверки, как указано выше.
Смежные вопросы