У меня есть webapi, возвращающий сумму (упрощенный пример):
Поэтому он может вернуться, например:
{
Amount:40
}
{
Amount:40.1
}
{
Amount:40.15
}
Можно ли всегда возвращать число с двумя десятичными знаками:
{
Amount:40.00
}
{
Amount:40.10
}
{
Amount:40.15
}
2 ответа
Вы можете использовать настраиваемый конвертер, который округляет каждое десятичное значение до заданного количества знаков после запятой:
public class JsonDecimalConverter : JsonConverter
{
private int decimals;
public JsonDecimalConverter(int decimals = 2)
{
this.decimals = decimals;
}
public override bool CanConvert(Type objectType) => objectType == typeof(decimal);
public override object ReadJson(JsonReader reader,
Type objectType, object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer,
object value, JsonSerializer serializer)
{
writer.WriteValue(Decimal.Round((decimal)value, decimals));
}
}
Применение:
var thing = new Thing { Amount = 40.12345M, Name = "Foo" };
var json = JsonConvert.SerializeObject(thing, new JsonDecimalConverter());
Выход:
{
"Amount": 40.12,
"Name": "Foo"
}
Обратите внимание, что это даст вам 40
для десятичного числа 40
. Потому что нет значимых цифр, которые нужно хранить. 40.00
- это проблема форматирования строки, которую вы должны решить, где вы хотите отобразить или сохранить это десятичное представление.
40.00
исчезнут. Чтобы вывести эти нули, вам все равно нужно отформатировать число
Вам просто нужно использовать
decimal.Round(myDecimalValue, 2)
Похожие вопросы
Связанные вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.
40.00
- это формат числа. номер такой же40