нет перегрузки для метода «ToString» принимает 1 аргумент

Я хотел бы преобразовать данные в форматирование денег, но это дает ошибку.

Faturamento.ValorNF = decimal.Parse(RsFaturamento.Fields["ValorTotal"].Value.ToString("#.##"));

Сообщение об ошибке: «нет перегрузки для метода «ToString» принимает 1 аргумент»

Интересно, что не так с моим кодом?


person Igor Lessa    schedule 22.04.2016    source источник
comment
Хорошо, каков тип времени компиляции RsFaturamento.Fields["ValorTotal"].Value? И зачем вам преобразовывать значение в строку только для того, чтобы снова его проанализировать?   -  person Jon Skeet    schedule 22.04.2016
comment
Это потому, что у меня есть значение, например: 11541.121221, и я хочу преобразовать его в 11541,12.   -  person Igor Lessa    schedule 22.04.2016
comment
Похоже, вы должны звонить Math.Round...   -  person Jon Skeet    schedule 22.04.2016
comment
Кажется, что RsFaturamento.Fields["ValorTotal"].Value не десятичная дробь, попробуйте decimal.Parse(RsFaturamento.Fields["ValorTotal"].Value).ToString("#.##")   -  person nizzik    schedule 22.04.2016
comment
@nizzik теперь я выдаю эту ошибку Аргумент 1: невозможно преобразовать из «объекта» в «строку»   -  person Igor Lessa    schedule 22.04.2016
comment
Какой тип имеет свойство Value? Это важно знать, если мы должны помочь вам.   -  person Poul Bak    schedule 22.04.2016
comment
Я мог бы сделать следующееMath.Round(decimal.Parse(RsFaturamento.Fields[ValorTotal].Value.ToString()), 2);   -  person Igor Lessa    schedule 22.04.2016


Ответы (2)


Каким бы ни был тип объекта Value, определение класса для него не имеет перегрузки ToString(), которая принимает аргумент. Если Value имеет тип объекта в коллекции, вам нужно будет привести/преобразовать его в строку, которая затем передается методу разбора десятичного числа. Обратите внимание, что ToString("#.##") на самом деле не имеет значения, если вы назначаете десятичный объект ValorNF, поскольку вы всегда можете отформатировать его позже для отображения.

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

decimal.Parse(RsFaturamento.Fields["ValorTotal"].Value.ToString()).ToString("N2", CultureInfo.InvariantCulture);
person exceptionthrown    schedule 22.04.2016
comment
теперь я даю эту ошибку Аргумент 1: невозможно преобразовать из «объекта» в «строку» - person Igor Lessa; 22.04.2016
comment
Спасибо, на основе вашего конвертирования: Math.Round(decimal.Parse(RsFaturamento.Fields[ValorTotal].Value.ToStrin‌​g()), 2); - person Igor Lessa; 22.04.2016

Независимо от типа Value, убедитесь, что у него есть общедоступный метод переопределения строки ToString(){}, который дает вам строковое представление.

Затем вы можете сделать:

decimal money = decimal.Parse(RsFaturamento.Fields["ValorTotal"].Value.ToString());

Faturamento.ValorNF = money.ToString("C"));
person Xena    schedule 22.04.2016