From 09cc3f89ed5cd4ba67cf7a527c76c27bf6a3825a Mon Sep 17 00:00:00 2001 From: Kenn Jacobsen Date: Sun, 20 Jan 2019 17:26:17 +0100 Subject: [PATCH] Make sure the decimal field value converter can handle double values when converting --- .../ValueConverters/DecimalValueConverter.cs | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/Umbraco.Core/PropertyEditors/ValueConverters/DecimalValueConverter.cs b/src/Umbraco.Core/PropertyEditors/ValueConverters/DecimalValueConverter.cs index a20694770c..6f7888aee3 100644 --- a/src/Umbraco.Core/PropertyEditors/ValueConverters/DecimalValueConverter.cs +++ b/src/Umbraco.Core/PropertyEditors/ValueConverters/DecimalValueConverter.cs @@ -18,17 +18,31 @@ namespace Umbraco.Core.PropertyEditors.ValueConverters public override object ConvertSourceToIntermediate(IPublishedElement owner, PublishedPropertyType propertyType, object source, bool preview) { - if (source == null) return 0M; + if (source == null) + { + return 0M; + } - // in XML a decimal is a string + // is it already a decimal? + if(source is decimal) + { + return source; + } + + // is it a double? + if(source is double sourceDouble) + { + return Convert.ToDecimal(sourceDouble); + } + + // is it a string? if (source is string sourceString) { return decimal.TryParse(sourceString, NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture, out decimal d) ? d : 0M; } - // in the database an a decimal is an a decimal - // default value is zero - return source is decimal ? source : 0M; + // couldn't convert the source value - default to zero + return 0M; } } }