Member 10379103 Ответов: 2

Как отформатировать числа в строке для отображения с двумя десятичными знаками


У меня есть поле, которое является типом данных varchar, который передает как текст, так и числа в мой RDL.

Мне нужно отобразить цифры (часто вводимые как 00.00000) с двумя десятичными знаками при отображении любого текста в поле в виде текста.

Я использовал IIF оператор для форматирования поля, но он либо отображает D, 00.00, ##.##, или ошибка в полях.

Вот примеры моих попыток:
IIF(Fields.MyField.Value="Number", Format(Fields!MyValue.Value, "D", cstr(Fields!MyValue.Value)) **Это отображало Ds в поле, когда я пытался отформатировать поле как десятичное. Использование нижнего регистра d не сработало.

IIF(Fields.MyField.Value"Number", Format(Fields!MyValue.Value, "00.00", cstr(Fields!MyValue.Value)) **Это отображается 00.00. Удаление двойных кавычек отображало нули вместо фактических строковых значений.


Как я могу получить числа, которые находятся в этом поле nvarchar для отображения с двумя десятичными знаками, а также отображать фактический текст в виде текста? Это должно быть очень просто сделать!

Что я уже пробовал:

Мои попытки описаны в моем вопросе.

Richard Deeming

Если поле MyField содержит литеральную строку "Number" как вы думаете, как эта строка будет преобразована в число?

Member 10379103

Ричард,

Я случайно набрал не то поле! Фактическое поле, содержащее слово "число", является категорией, поэтому оператор должен читать " IIF(Fields.Category. Value= "Число", Формат (Поля!Моя ценность.Значение), "00.00"), Поля!Моя ценность.Ценность)

2 Ответов

Рейтинг:
1

David_Wimbley

Если вы в состоянии, я бы изменил поток данных в вашем отчете и обработал его таким образом.

См. пример t-sql ниже.

DECLARE @MoneyValue NVARCHAR(200) = '40.403285923';
DECLARE @MoneyValue2 NVARCHAR(200) = '49';
DECLARE @TextValue NVARCHAR(200) ='im not a number';

--2 decimal places
SELECT CAST(ROUND(CAST(@MoneyValue AS FLOAT),2) AS MONEY)

--Check If number, convert text to have 2 decimal places and then to nvarchar, if not a number, then display as is
SELECT CASE WHEN ISNUMERIC(@TextValue ) = 1 THEN CAST(CAST(ROUND(CAST(@TextValue AS FLOAT), 2) AS MONEY) AS NVARCHAR(200)) ELSE @TextValue END


Member 10379103

Дейв,

К сожалению, у меня нет такой возможности. Я почти там, хотя - это работает для форматирования чисел, но отображает #Error для строкового текста или пустого:

=ИИФ(полей!Моя ценность.Value= "Number", Format (CDbl(Поля!Моя ценность.Значение), "00.00"), Поля!Моя ценность.Ценность)

Если я смогу просто устранить ошибку #, которая отображается в последней части условия m, я, возможно, наконец-то решу эту проблему.

Есть идеи?

David_Wimbley

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

Если вы конвертируете свой текст в двойник, добавляете его в деньги, а затем конвертируете обратно в текст, это будет работать

В основном та же идея в запросе, который я опубликовал. Посмотрите, как он преобразует текст в float, затем деньги (чтобы получить 2 десятичных знака), а затем обратно в текст. Вот что вам нужно сделать здесь, я думаю, что вы преобразовали CDbl обратно в текст, он не будет печатать #Error в ситуациях, когда ваше значение не является числом.

Рейтинг:
0

Maciej Los

Кажется, вам нужно проверить, есть ли значение в MyField поле-это числовое значение. Если это так, вам нужно отформатировать его:
=IIF(IsNumeric(MyField), Format(MyField, "##0.00"), MyField)

Для получения более подробной информации, пожалуйста, смотрите:
Примеры выражений (построитель отчетов и службы SSRS)[^]
IsNumeric Функция (Visual Basic)[^]