Vedavyas Velaga Ответов: 2

Как я могу удалить только последний трейлинг-ноль?


Как я могу удалить один конечный ноль для десятичного типа данных, например, см. ниже пример данных.
Input Values  >> Expected output values 
1)29.36       >> 29.36
2)29.00       >> 29.0
3)20.00       >> 20.0
4)29.50       >> 29.5
5)20          >> 20


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

Я попытался использовать тип данных float, но если входное значение равно 29.00, то оно отображается только как 29, но я хочу, чтобы оно было 29.0.
строковые форматы также кажутся точными в этом случае, так как мне нужно удалить второе десятичное значение только в том случае, если оно равно нулю.

2 Ответов

Рейтинг:
1

Maciej Los

В дополнение к решению №1 от OriginalGriff, я бы рекомендовал прочитать это: Демистифицированная Плавающая Точка, Часть 1[^] и это: Что Каждый Компьютерщик Должен Знать Об Арифметике С Плавающей Запятой[^]

Вывод: вы хотите отобразить десятичное значение в пользовательском формате.

Строки Стандартного Числового Формата | Microsoft Docs[^]
Пользовательский Числовой Формат Строк | Майкрософт Документы[^]


Рейтинг:
0

OriginalGriff

Попробуйте форматировать строку: "0.0#"

decimal d;
d = 29.36M;
Console.WriteLine("{0}:{0:0.0#}", d);
d = 29.00M;
Console.WriteLine("{0}:{0:0.0#}", d);
d = 20.00M;
Console.WriteLine("{0}:{0:0.0#}", d);
d = 29.50M;
Console.WriteLine("{0}:{0:0.0#}", d);
Дает:
29.36:29.36
29.00:29.0
20.00:20.0
29.50:29.5


Maciej Los

5ed!

Vedavyas Velaga

Это очень хорошее решение, Спасибо за ваш ответ.
Но я пропустил еще один момент, чтобы упомянуть в вопросе, который я обновил сейчас, где я ожидаю выхода 20, если вход 20, и 29, если вход 29,
Не могли бы вы помочь мне и в достижении этого результата