Skip to content

Commit

Permalink
~
Browse files Browse the repository at this point in the history
  • Loading branch information
badhitman committed Aug 28, 2019
1 parent c295357 commit 30d1f8d
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 4 deletions.
2 changes: 1 addition & 1 deletion CustomFloatingModelBinder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public Task BindModelAsync(ModelBindingContext model_binding_context)
// Таким образом исключаем точки в начале или в конце строки:
// ".5" -> "0.50"
// "5." -> "05.0"
if (FloatSeparator.IsMatch(FieldValueAsNormalString))
if (FloatSeparator.IsMatch(FieldValueAsString))
FieldValueAsNormalString = "0" + FieldValueAsNormalString + "0";

////////////////////////////////////////////////////
Expand Down
16 changes: 13 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,18 @@
# ASP.NET Core 2.2 BinderFloatingDecimalModel
Привязчик модели для числовых значений double, float и decimal в ASP.NET Core 2.2
Привязчик модели в ASP.NET Core 2.2 для числовых значений с плавающей точкой **[double, float или decimal]**

Позволяет в формах использовать любой разделитель дроби. Можно использовать либо точку либо запятую. Любой разделитель принудительно замениться на системный перед конвертацией.
Допускается сокращённый формат записи чисел. Например: 0,5 и .5 дадут один результат
Известная особенность стандартног опривязчика модели в ASP.NET Core 2.2 заключается в том, что нельзя использовать типы значений с плавающей запятой.
Все числовые значения встроеный привязчик модели пытается обработать как целочисленные, даже если тип свойства модели объявлен как [double, float или decimal].
Данный привязчик модели исправляет не только эту проблему, но и освобождает пользователя от ограничения использования дробного разделителя (точка или запятая).

Данный привязчик позволяет использовать любой разделитель дроби. Любой разделитель принудительно замениться на системный перед конвертацией.
Кроме того допускается усечённый формат записи чисел. Например: 0,5 и .5 дадут один результат. Равно как и 5.0 == 5. Эта особенность выглядет спорной => можно закомментировать эту часть.

```C#
// Regex FloatSeparator = new Regex(@"[.,]", RegexOptions.Compiled)
if (FloatSeparator.IsMatch(FieldValueAsString))
FieldValueAsNormalString = "0" + FieldValueAsNormalString + "0";
```

Отдельного внимания требует шаблон регулярного выражения предполагаемого значения. Файл: **CustomFloatingModelBinder.cs**
```C#
Expand Down

0 comments on commit 30d1f8d

Please sign in to comment.