Veikedo

Template service preview

Aug 31st, 2020
2,333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.74 KB | None | 0 0
  1. using System;
  2. using System.Globalization;
  3.                    
  4. public class Program
  5. {
  6.     public static void Main()
  7.     {
  8.         double val = 123456.789;
  9.         string format = "#,.##0.00";
  10.         string culture = "RU";
  11.        
  12.         var formattedValue = GetFormattedValue(val, format, culture);
  13.        
  14.         Console.WriteLine(formattedValue);
  15.     }
  16.    
  17.     private static string GetFormattedValue(double? val, string format, string culture)
  18.     {
  19.       var formatString = format ?? "0.0";
  20.       var signFormat =
  21.         !formatString.StartsWith("#") && !formatString.StartsWith("+") ? "" :
  22.         val <= 0                                                       ? "" :
  23.                                                                          "+";
  24.  
  25.       format = $"{signFormat}{formatString}";
  26.  
  27.       var ci = CultureInfo.GetCultureInfo(culture);
  28.       var pos = format.IndexOf(',');
  29.       if (pos != -1 && format.Length > pos + 1 && format[pos + 1] != '0')
  30.       {
  31.         var delimiter = format[pos + 1].ToString();
  32.         ci = (CultureInfo) ci.Clone();
  33.         ci.NumberFormat.CurrencyGroupSeparator = delimiter;
  34.         ci.NumberFormat.PercentGroupSeparator = delimiter;
  35.         ci.NumberFormat.NumberGroupSeparator = delimiter;
  36.         format = format.Replace("," + delimiter, ",");
  37.       }
  38.  
  39.       pos = format.IndexOf('.');
  40.       if (pos != -1 && format.Length > pos + 1 && format[pos + 1] != '0')
  41.       {
  42.         var point = format[pos + 1].ToString();
  43.         ci = (CultureInfo) ci.Clone();
  44.         ci.NumberFormat.NumberDecimalSeparator = point;
  45.         ci.NumberFormat.PercentDecimalSeparator = point;
  46.         ci.NumberFormat.CurrencyDecimalSeparator = point;
  47.         format = format.Replace("." + point, ".");
  48.       }
  49.  
  50.       return val.Value.ToString(format, ci);
  51.     }
  52.  
  53. }
Advertisement
Add Comment
Please, Sign In to add comment