2015-12-16 4 views
-1

Я пытаюсь преобразовать тип строки долго в следующем коде:Преобразование строкового типа в длинной

PaymentReceived = String.Format(new CultureInfo("en-IN", true), "{0:n}", t.PaymentReceived), 

Здесь t.PaymentReceived имеет тип долго, и PaymentReceived имеет тип строки, но я хочу его быть длинным.

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

PaymentReceived = Convert.ToInt64(String.Format(new CultureInfo("en-IN", true), "{0:n}", t.PaymentReceived)) 

Но ошибка Дополнительная информация: Входная строка не была в правильном формате.

Так что, пожалуйста, помогите мне с другим решением, спасибо.

+0

Вы уверены, что ваш 'PaymentReceived' отформатирован хорошо? –

+0

да, я !!!!! @teovankot – thiru

ответ

0

Форматирующий n, добавляет дополнительные нечисловые символы. Для культуры en-IN это означает, что число, подобное 1000, заканчивается как 1,000.00.

Метод Convert.ToInt64 требует, чтобы строка была на 100% числовой, включая период, который может быть штрафом для Convert.ToDecimal, но длинный не является поплавком. Поэтому, решительно, ваша строка не отформатирована правильно, и ошибка очевидна и правильна. Я не уверен, какова ваша конечная цель, но нет смысла конвертировать длинную форматированную строку, а затем сразу же преобразовывать ее в длинную.

Предполагая, что у вас есть только строка, и вам нужно отформатировать ее как длинную, тогда вам нужно убедиться, что она отформатирована как длинная. Это требует:

  1. Split на десятичную точку и взять только левую сторону:

    str = str.Split(new[] { '.' })[0]; 
    
  2. Replace запятые с пустыми строками:

    str = str.Replace(",", ""); 
    

Это подразумевает, что вы знаете, формат будет примерно 1,000.00. В противном случае вы можете использовать регулярное выражение для замены всех нечисловых символов пустой строкой. Однако вам все равно нужно разделить на десятичную. В противном случае, если вы просто удалите все нечисловые символы из чего-то вроде 1,000.00, тогда вы получите 100000, что в 100 раз больше, чем фактический номер строки. Кроме того, все это зависит от культуры. В некоторых культурах используется десятичный разделитель , и . и разделитель в больших количествах. Если вам нужно обрабатывать различные культуры, вам нужно будет соответствующим образом отрегулировать.

+0

Я пытаюсь получить значение, разделенное запятой, в переменной PaymentReceived, которая имеет тип long. но когда я использую синтаксис, например string.format(), значения преобразуются в строку, которая не является ожидаемым типом данных для хранения в таблице. Поэтому я пытаюсь преобразовать ее снова в long ... @ChrisPratt – thiru

+0

Да, это не намного яснее, но независимо от того, как и почему вы заканчиваете строку, вам сначала придется выполнить некоторую работу, прежде чем вы сможете ее преобразовать. См. Мое обновление выше. –

+0

У меня его есть .. спасибо. @ChrisPratt – thiru

Смежные вопросы