Мне нужно отформатировать число с плавающей запятой (представленное как std::string
), где выход будет иметь 14 цифр с максимальным значением, включая как неотъемлемую часть, так и десятичную часть.Динамическое форматирование номера фиксированной точки
В то время как ограничивается до 14 цифр, интегральная часть может иметь ДО 14 цифр (то есть не дробная часть) и десятичной части может иметь максимум 7 цифр (затем 7 цифр для интегральной части)
**Examples**
123
123.456
123456789
1234567.89
1234.5678901
1234567890123.4
1234567890123.456 // Invalid; Should be transformed to 1234567890123.4
123456789.6 // Invalid; Should be transformed to 123456789
Идея состоит в том, чтобы сохранить length =< 14
, где максимальное число десятичных чисел равно 7. В конце концов, мне также необходимо добавить тысячи разделителей, а также.
Текущий подход В настоящее время я пытаюсь разбить строку с использованием десятичной точки и извлечь две части номера. (Если нет "."
, он будет обрабатываться отдельно). Затем размеры проверяются на неотъемлемую часть и десятичную часть.
Однако, поскольку это не прямолинейно, в некоторых случаях это терпит неудачу.
Но мой вопрос:
Есть ли простой способ, что я могу использовать без все этого беспорядка?
Что вы будете делать, если у вас есть более 14 цифр? Что вы делаете, когда у вас более 7 знаков после запятой? Вы округляете или просто усекаетесь? – NathanOliver
Возможно, вы могли бы использовать 'std :: set_precision' вместе с' std :: ostringstream'? –
@NathanOliver: Усечение будет хорошо. –