Пример #1
0
        // Format a percentage value.
        public static String FormatPercent
            (Object Expression,
            [Optional][DefaultValue(-1)] int NumDigitsAfterDecimal,
            [Optional][DefaultValue(TriState.UseDefault)]
            TriState IncludeLeadingDigit,
            [Optional][DefaultValue(TriState.UseDefault)]
            TriState UseParensForNegativeNumbers,
            [Optional][DefaultValue(TriState.UseDefault)]
            TriState GroupDigits)
        {
            NumberFormatInfo nfi        = CultureInfo.CurrentCulture.NumberFormat;
            NumberFormatInfo nfiCurrent = nfi;

            if (NumDigitsAfterDecimal != -1)
            {
                nfi = (NumberFormatInfo)(nfi.Clone());
                nfi.PercentDecimalDigits = NumDigitsAfterDecimal;
            }
            if (UseParensForNegativeNumbers != TriState.UseDefault)
            {
                if (nfi == nfiCurrent)
                {
                    nfi = (NumberFormatInfo)(nfi.Clone());
                }
                if (UseParensForNegativeNumbers == TriState.False)
                {
                    nfi.PercentNegativePattern = 0;
                }
                else
                {
                    nfi.PercentNegativePattern = 1;
                }
            }
            if (GroupDigits != TriState.UseDefault)
            {
                if (nfi == nfiCurrent)
                {
                    nfi = (NumberFormatInfo)(nfi.Clone());
                }
                if (GroupDigits == TriState.False)
                {
                    nfi.PercentGroupSizes = new int [] { 0 };
                }
                else
                {
                    nfi.PercentGroupSizes = new int [] { 3 };
                }
            }
            return(DoubleType.FromObject(Expression).ToString("P", nfi));
        }
        /// <summary>
        /// Refunds a payment
        /// </summary>
        /// <param name="refundPaymentRequest">Request</param>
        /// <returns>Result</returns>
        public RefundPaymentResult Refund(RefundPaymentRequest refundPaymentRequest)
        {
            var result = new RefundPaymentResult();

            //result.AddError("Refund method not supported");
            try
            {
                NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat;
                nfi = (NumberFormatInfo)nfi.Clone();
                nfi.CurrencySymbol = "";
                var    order           = refundPaymentRequest.Order;
                string transactioncode = order.AuthorizationTransactionCode;
                string amount          = string.Format(nfi, "{0:c}", refundPaymentRequest.AmountToRefund);
                Regex  digitsOnly      = new Regex(@"[^\d]");
                amount = digitsOnly.Replace(amount, "");
                string apiobject = "refunds";
                string buildurl  = _PayMillPaymentSettings.apiUrl + apiobject + "/" + transactioncode + "?amount=" + amount;
                string response  = GetPMAPIResponse(buildurl, _PayMillPaymentSettings.privateKey);
                if (response != null)
                {
                }
            }
            catch (Exception ex)
            {
                _logger.InsertLog(Core.Domain.Logging.LogLevel.Error, ex.Message, ex.ToString());
                result.AddError(ex.ToString());
            }
            return(result);
        }
        public static string FormatWithISOCurrencySymbol(Decimal amount, string ISOCurrencySymbol = null)
        {
            NumberFormatInfo numberFormat = null;

            if (ISOCurrencySymbol != null)
            {
                numberFormat = (from c in CultureInfo.GetCultures(CultureTypes.SpecificCultures)
                                let r = new RegionInfo(c.LCID)
                                        where r != null &&
                                        r.ISOCurrencySymbol.ToUpper() == ISOCurrencySymbol.ToUpper()
                                        select c).First().NumberFormat;
            }
            else
            {
                numberFormat = CultureInfo.CurrentCulture.NumberFormat;
                var specificCulture = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
                ISOCurrencySymbol = new RegionInfo(specificCulture.LCID).ISOCurrencySymbol;
            }

            var numberFormatInfo = (NumberFormatInfo)numberFormat.Clone();

            numberFormatInfo.CurrencySymbol = ISOCurrencySymbol.ToUpper();

            // Add spaces between the figure and the currency
            //https://docs.microsoft.com/en-us/dotnet/api/system.globalization.numberformatinfo.currencypositivepattern?redirectedfrom=MSDN&view=netframework-4.7.2#System_Globalization_NumberFormatInfo_CurrencyPositivePattern
            //n $
            numberFormatInfo.CurrencyPositivePattern = 3;
            //https://docs.microsoft.com/en-us/dotnet/api/system.globalization.numberformatinfo.currencynegativepattern?redirectedfrom=MSDN&view=netframework-4.7.2#System_Globalization_NumberFormatInfo_CurrencyNegativePattern
            //-n $
            numberFormatInfo.CurrencyNegativePattern = 8;

            return(amount.ToString("C", numberFormatInfo));
        }
Пример #4
0
        public static NumberFormatInfo ReadOnly(NumberFormatInfo nfi)
        {
            NumberFormatInfo copy = (NumberFormatInfo)nfi.Clone();

            copy.isReadOnly = true;
            return(copy);
        }
Пример #5
0
    public bool PosTest1()
    {
        bool retVal = true;

        // Add your scenario description here
        TestLibrary.TestFramework.BeginScenario("PosTest1: Verify method Clone .");

        try
        {
            NumberFormatInfo nfi1 = new NumberFormatInfo();
            NumberFormatInfo nfi2 = (NumberFormatInfo)nfi1.Clone();

            if (!nfi1.Equals(nfi2) && nfi1.GetHashCode() == nfi2.GetHashCode())
            {
                TestLibrary.TestFramework.LogError("001.1", "Method Clone Err .");
                retVal = false;
            }
        }
        catch (Exception e)
        {
            TestLibrary.TestFramework.LogError("001", "Unexpected exception: " + e);
            TestLibrary.TestFramework.LogInformation(e.StackTrace);
            retVal = false;
        }

        return(retVal);
    }
Пример #6
0
        public static bool TryParse(string value, IFormatProvider formatProvider, out Money result)
        {
            if (value == null)
            {
                result = default;
                return(false);
            }

            NumberFormatInfo numberFormat =
                (NumberFormatInfo)formatProvider?.GetFormat(typeof(NumberFormatInfo)) ??
                NumberFormatInfo.CurrentInfo;

            var currencyString = ExtractCurrencyString(value, numberFormat);

            if (!Currency.TryParse(currencyString, out Currency currency))
            {
                currency = Currency.None;
            }

            numberFormat = (NumberFormatInfo)numberFormat.Clone();
            numberFormat.CurrencySymbol = currency != Currency.None ? currencyString : "¤";

            if (decimal.TryParse(value, NumberStyles.Currency, numberFormat, out decimal amount))
            {
                result = new Money(amount, currency);
                return(true);
            }
            else
            {
                result = default;
                return(false);
            }
        }
Пример #7
0
    public bool PosTest1()
    {
        bool retVal = true;

        // Add your scenario description here
        TestLibrary.TestFramework.BeginScenario("PosTest1: Verify method Clone .");

        try
        {
            NumberFormatInfo nfi1 = new NumberFormatInfo();
            NumberFormatInfo nfi2 = (NumberFormatInfo)nfi1.Clone();

            if (!nfi1.Equals(nfi2) && nfi1.GetHashCode() == nfi2.GetHashCode())
            {
                TestLibrary.TestFramework.LogError("001.1", "Method Clone Err .");
                retVal = false;
            }
        }
        catch (Exception e)
        {
            TestLibrary.TestFramework.LogError("001", "Unexpected exception: " + e);
            TestLibrary.TestFramework.LogInformation(e.StackTrace);
            retVal = false;
        }

        return retVal;
    }
Пример #8
0
        public static void Mainc(string[] args)
        {
            string prix = "1333,565 EUR";
            var    test = CultureInfo.CreateSpecificCulture("fr-CH");

            test.NumberFormat.CurrencyDecimalSeparator = ",";
            test.NumberFormat.CurrencyGroupSeparator   = "";
            test.NumberFormat.CurrencySymbol           = "FR";

            var value = decimal.Parse(prix);
            var toto  = (value).ToString("C", test.NumberFormat);

            //Console.WriteLine( toto);
            System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("fr-CH");
            NumberFormatInfo nfi = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat;
            var clone            = (NumberFormatInfo)nfi.Clone();

            clone.CurrencySymbol          = "CHF";
            clone.CurrencyPositivePattern = 2;
            // Change the negative currency pattern to <code><space><sign><value>.
            clone.CurrencyNegativePattern = 12;

            var p1 = 132.92m;
            var p2 = 133.00m;
            var p3 = -13.22m;
            var p4 = 133.47m;

            Console.WriteLine(LiteralDecimal(p1));
            Console.WriteLine(LiteralDecimal(p2));
            Console.WriteLine(LiteralDecimal(p3));
            Console.WriteLine(LiteralDecimal(p4));
        }
Пример #9
0
        public static string DecimalToText(decimal value)
        {
            NumberFormatInfo format = FormatInfoLogic.Number;

            format = (NumberFormatInfo)format.Clone();
            format.NumberDecimalDigits = 28;
            return(RuntimePlatformUtils.RemoveTrailingZeros(value.ToString("N", format), format));
        }
Пример #10
0
        private NumberFormatInfo CustomizeNumberFormat(NumberFormatInfo numberFormat)
        {
            var clone = (NumberFormatInfo)numberFormat.Clone();

            clone.CurrencyDecimalDigits = _currency.DefaultDecimals;
            clone.CurrencySymbol        = _currency.Symbol ?? _currency.Code ?? string.Empty;
            return(clone);
        }
Пример #11
0
 public frmTransactions()
 {
     InitializeComponent();
     this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
     nfi = (NumberFormatInfo)nfi.Clone();
     nfi.CurrencySymbol = "";
     loadPage();
 }
Пример #12
0
        public static string FormatCurrency(decimal value)
        {
            NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat;

            nfi = (NumberFormatInfo)nfi.Clone();
            nfi.CurrencySymbol = "";

            return(string.Format(nfi, "{0:c}", value));
        }
Пример #13
0
    static void Main()
    {
        NumberFormatInfo nfi = CultureInfo.CurrentCulture.NumberFormat;

        nfi = (NumberFormatInfo)nfi.Clone();

        Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
        nfi.CurrencySymbol = "";
        Console.WriteLine(string.Format(nfi, "{0:c}", 123.45m));
    }
Пример #14
0
        public static bool TryParse(string s, NumberStyles style, NumberFormatInfo numberFormatInfo, Currency currency, out Money?money)
        {
            var mergedNumberFormatInfo = (NumberFormatInfo)numberFormatInfo.Clone();

            mergedNumberFormatInfo.CurrencySymbol = currency.Symbol;

            money = tryParse(s, style, mergedNumberFormatInfo, currency.IsoCode);

            return(money.HasValue);
        }
Пример #15
0
        public frmTransactionsPayroll()
        {
            InitializeComponent();

            //currency formatting
            nfi = (NumberFormatInfo)nfi.Clone();
            nfi.CurrencySymbol = "";

            loadPage();
        }
Пример #16
0
        public frmReportsTransactionQueries()
        {
            InitializeComponent();

            //Load currency format
            nfi = (NumberFormatInfo)nfi.Clone();
            nfi.CurrencySymbol = "";

            loadPage();
        }
    public static void Main()
    {
        NumberFormatInfo nfi = NumberFormatInfo.CurrentInfo;

        Console.WriteLine("Read-Only: {0}\n", nfi.IsReadOnly);

        NumberFormatInfo nfiw = (NumberFormatInfo)nfi.Clone();

        Console.WriteLine("Read-Only: {0}", nfiw.IsReadOnly);
    }
Пример #18
0
    public static void Main()
    {
        NumberFormatInfo current1 = NumberFormatInfo.CurrentInfo;

        current1 = (NumberFormatInfo)current1.Clone();
        Console.WriteLine(current1.IsReadOnly);

        CultureInfo      culture2 = CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.Name);
        NumberFormatInfo current2 = culture2.NumberFormat;

        Console.WriteLine(current2.IsReadOnly);
    }
        /// <summary>
        /// Returns a clone of provided formatter and adjusts its number of decimal
        /// digits accordingly.
        /// </summary>
        /// <remarks>
        /// This method returns a clone of provided <paramref name="formatter"/> and
        /// adjusts its number of decimal digits accordingly. The provided number of
        /// decimal digits is limited to a range of [0..99].
        /// </remarks>
        /// <param name="formatter">
        /// The formatter to be cloned.
        /// </param>
        /// <param name="decimals">
        /// The number of decimal digits to be used.
        /// </param>
        /// <returns>
        /// The derived and configured number formatter.
        /// </returns>
        private NumberFormatInfo GetFormatter(NumberFormatInfo formatter, Int32 decimals)
        {
            const Int32 min = 0;
            const Int32 max = 99;

            NumberFormatInfo result = formatter.Clone() as NumberFormatInfo;

            // NumberFormatInfo.NumberDecimalDigits requires decimals in range of [0..99].
            result.NumberDecimalDigits = (decimals < min) ? min : ((decimals > max) ? max : decimals);

            return(result);
        }
Пример #20
0
    static void Main()
    {
        decimal     total   = 1234.56m;
        CultureInfo vietnam = new CultureInfo(1066);
        CultureInfo usa     = new CultureInfo("en-US");

        NumberFormatInfo nfi = usa.NumberFormat;

        nfi = (NumberFormatInfo)nfi.Clone();
        nfi.CurrencySymbol = vietnam.NumberFormat.CurrencySymbol;

        Console.WriteLine(total.ToString("c", nfi));
    }
Пример #21
0
        internal static NumberFormatInfo GetNormalizedNumberFormat(NumberFormatInfo InNumberFormat)
        {
            NumberFormatInfo numberFormatInfo1 = InNumberFormat;

            if (numberFormatInfo1.CurrencyDecimalSeparator != null && numberFormatInfo1.NumberDecimalSeparator != null && (numberFormatInfo1.CurrencyGroupSeparator != null && numberFormatInfo1.NumberGroupSeparator != null) && (numberFormatInfo1.CurrencyDecimalSeparator.Length == 1 && numberFormatInfo1.NumberDecimalSeparator.Length == 1 && (numberFormatInfo1.CurrencyGroupSeparator.Length == 1 && numberFormatInfo1.NumberGroupSeparator.Length == 1)) && ((int)numberFormatInfo1.CurrencyDecimalSeparator[0] == (int)numberFormatInfo1.NumberDecimalSeparator[0] && (int)numberFormatInfo1.CurrencyGroupSeparator[0] == (int)numberFormatInfo1.NumberGroupSeparator[0] && numberFormatInfo1.CurrencyDecimalDigits == numberFormatInfo1.NumberDecimalDigits))
            {
                return(InNumberFormat);
            }
            NumberFormatInfo numberFormatInfo2 = InNumberFormat;

            if (numberFormatInfo2.CurrencyDecimalSeparator != null && numberFormatInfo2.NumberDecimalSeparator != null && (numberFormatInfo2.CurrencyDecimalSeparator.Length == numberFormatInfo2.NumberDecimalSeparator.Length && numberFormatInfo2.CurrencyGroupSeparator != null) && (numberFormatInfo2.NumberGroupSeparator != null && numberFormatInfo2.CurrencyGroupSeparator.Length == numberFormatInfo2.NumberGroupSeparator.Length))
            {
                int num1   = 0;
                int num2   = checked (numberFormatInfo2.CurrencyDecimalSeparator.Length - 1);
                int index1 = num1;
                while (index1 <= num2)
                {
                    if ((int)numberFormatInfo2.CurrencyDecimalSeparator[index1] == (int)numberFormatInfo2.NumberDecimalSeparator[index1])
                    {
                        checked { ++index1; }
                    }
                    else
                    {
                        goto label_13;
                    }
                }
                int num3   = 0;
                int num4   = checked (numberFormatInfo2.CurrencyGroupSeparator.Length - 1);
                int index2 = num3;
                while (index2 <= num4)
                {
                    if ((int)numberFormatInfo2.CurrencyGroupSeparator[index2] == (int)numberFormatInfo2.NumberGroupSeparator[index2])
                    {
                        checked { ++index2; }
                    }
                    else
                    {
                        goto label_13;
                    }
                }
                return(InNumberFormat);
            }
label_13:
            NumberFormatInfo numberFormatInfo3 = (NumberFormatInfo)InNumberFormat.Clone();
            NumberFormatInfo numberFormatInfo4 = numberFormatInfo3;

            numberFormatInfo4.CurrencyDecimalSeparator = numberFormatInfo4.NumberDecimalSeparator;
            numberFormatInfo4.CurrencyGroupSeparator   = numberFormatInfo4.NumberGroupSeparator;
            numberFormatInfo4.CurrencyDecimalDigits    = numberFormatInfo4.NumberDecimalDigits;
            return(numberFormatInfo3);
        }
Пример #22
0
        /// <summary>
        /// Displays the current value of the numeric up-down control in the appropriate format.
        /// </summary>
        internal void UpdateText()
        {
            NumberFormatInfo formatInfo = (NumberFormatInfo)NumberFormatInfo.Clone();

            formatInfo.NumberGroupSeparator = String.Empty;

            string formattedValue = Value.ToString("F" + DecimalPlaces, formatInfo);

            if (_textBox != null)
            {
                _lastInput    = formattedValue;
                _textBox.Text = formattedValue;
            }
        }
Пример #23
0
        public CSVExportFormatter(CSVExportUserPreferences userPreference, OutputTypes outputType, bool isRawDataAsDBaseRequired = false)
        {
            UserPreference           = userPreference;
            OutputType               = outputType;
            IsRawDataAsDBaseRequired = isRawDataAsDBaseRequired;
            NullString               = isRawDataAsDBaseRequired ? string.Empty : "?";

            SetupUserPreferences(userPreference);

            _nfiUser = NumberFormatInfo.GetInstance(CultureInfo.InvariantCulture).Clone() as NumberFormatInfo;
            _nfiUser.NumberDecimalSeparator = userPreference.DecimalSeparator ?? _nfiUser.NumberDecimalSeparator;
            _nfiUser.NumberGroupSeparator   = userPreference.ThousandsSeparator ?? _nfiUser.NumberGroupSeparator;
            _nfiUser.NumberDecimalDigits    = DefaultDecimalPlaces;
            _nfiDefault = _nfiUser.Clone() as NumberFormatInfo; // the dp will be altered on this
        }
        public void TestClone()
        {
            NumberFormatInfo nfi1 = new NumberFormatInfo();

            nfi1.CurrencyDecimalSeparator = "testStr";
            NumberFormatInfo nfi2 = (NumberFormatInfo)nfi1.Clone();

            Assert.NotEqual(nfi1.GetHashCode(), nfi2.GetHashCode());
            Assert.NotEqual(nfi1, nfi2);
            Assert.Equal(nfi1.CurrencyDecimalDigits, nfi2.CurrencyDecimalDigits);
            Assert.Equal(nfi1.CurrencyDecimalSeparator, nfi2.CurrencyDecimalSeparator);
            Assert.Equal(nfi1.CurrencyGroupSizes, nfi2.CurrencyGroupSizes);
            Assert.Equal(nfi1.CurrencyGroupSeparator, nfi2.CurrencyGroupSeparator);
            Assert.Equal(nfi1.CurrencyNegativePattern, nfi2.CurrencyNegativePattern);
            Assert.Equal(nfi1.CurrencyPositivePattern, nfi2.CurrencyPositivePattern);
            Assert.Equal(nfi1.IsReadOnly, nfi2.IsReadOnly);
        }
Пример #25
0
        /// <summary>
        /// Create a number format based on the default format
        /// </summary>
        protected NumberFormatInfo CreateFormatInfo(int decDig, string decSep, string grSep)
        {
            var nfi = (NumberFormatInfo)defNfi.Clone();

            nfi.NumberDecimalDigits = decDig;

            if (decSep != null)
            {
                nfi.NumberDecimalSeparator = decSep;
            }

            if (grSep != null)
            {
                nfi.NumberGroupSeparator = grSep;
            }

            return(nfi);
        }
Пример #26
0
        public void Clone()
        {
            NumberFormatInfo format = new NumberFormatInfo();
            format.CurrencyDecimalSeparator = "string";

            NumberFormatInfo clone = (NumberFormatInfo)format.Clone();
            Assert.NotEqual(format.GetHashCode(), clone.GetHashCode());
            Assert.NotEqual(format, clone);
            Assert.NotSame(format, clone);

            Assert.Equal(format.CurrencyDecimalDigits, clone.CurrencyDecimalDigits);
            Assert.Equal(format.CurrencyDecimalSeparator, clone.CurrencyDecimalSeparator);
            Assert.Equal(format.CurrencyGroupSizes, clone.CurrencyGroupSizes);
            Assert.Equal(format.CurrencyGroupSeparator, clone.CurrencyGroupSeparator);
            Assert.Equal(format.CurrencyNegativePattern, clone.CurrencyNegativePattern);
            Assert.Equal(format.CurrencyPositivePattern, clone.CurrencyPositivePattern);
            Assert.Equal(format.IsReadOnly, clone.IsReadOnly);
        }
        internal static NumberFormatInfo GetNormalizedNumberFormat(NumberFormatInfo InNumberFormat)
        {
            NumberFormatInfo info2;
            NumberFormatInfo info3 = InNumberFormat;

            if (((((info3.CurrencyDecimalSeparator != null) && (info3.NumberDecimalSeparator != null)) && ((info3.CurrencyGroupSeparator != null) && (info3.NumberGroupSeparator != null))) && (((info3.CurrencyDecimalSeparator.Length == 1) && (info3.NumberDecimalSeparator.Length == 1)) && ((info3.CurrencyGroupSeparator.Length == 1) && (info3.NumberGroupSeparator.Length == 1)))) && (((info3.CurrencyDecimalSeparator[0] == info3.NumberDecimalSeparator[0]) && (info3.CurrencyGroupSeparator[0] == info3.NumberGroupSeparator[0])) && (info3.CurrencyDecimalDigits == info3.NumberDecimalDigits)))
            {
                return(InNumberFormat);
            }
            info3 = null;
            NumberFormatInfo info4 = InNumberFormat;

            if ((((info4.CurrencyDecimalSeparator != null) && (info4.NumberDecimalSeparator != null)) && ((info4.CurrencyDecimalSeparator.Length == info4.NumberDecimalSeparator.Length) && (info4.CurrencyGroupSeparator != null))) && ((info4.NumberGroupSeparator != null) && (info4.CurrencyGroupSeparator.Length == info4.NumberGroupSeparator.Length)))
            {
                int num;
                int num2 = info4.CurrencyDecimalSeparator.Length - 1;
                for (num = 0; num <= num2; num++)
                {
                    if (info4.CurrencyDecimalSeparator[num] != info4.NumberDecimalSeparator[num])
                    {
                        goto Label_018E;
                    }
                }
                int num3 = info4.CurrencyGroupSeparator.Length - 1;
                for (num = 0; num <= num3; num++)
                {
                    if (info4.CurrencyGroupSeparator[num] != info4.NumberGroupSeparator[num])
                    {
                        goto Label_018E;
                    }
                }
                return(InNumberFormat);
            }
            info4 = null;
Label_018E:
            info2 = (NumberFormatInfo)InNumberFormat.Clone();
            NumberFormatInfo info5 = info2;

            info5.CurrencyDecimalSeparator = info5.NumberDecimalSeparator;
            info5.CurrencyGroupSeparator   = info5.NumberGroupSeparator;
            info5.CurrencyDecimalDigits    = info5.NumberDecimalDigits;
            info5 = null;
            return(info2);
        }
Пример #28
0
        internal NumberFormatInfo GetNumberFormatInfo()
        {
            NumberFormatInfo numberFormatInfo;

            if (NumberFormatInfo == null)
            {
                // The separator should be updated only if no NumberFormatInfo is set explicitly to the NumericUpDown.
                numberFormatInfo = (NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone();
                SetNumberDecimalSeparator(numberFormatInfo);
                _isFromCurrentCulture = true;
            }
            else
            {
                numberFormatInfo      = (NumberFormatInfo)NumberFormatInfo.Clone();
                _isFromCurrentCulture = false;
            }

            return(numberFormatInfo);
        }
Пример #29
0
        public string ToString(string format, IFormatProvider provider, bool useISOCodeAsSymbol)
        {
            // REVIEW: was ist mit Digits, Groups, Decimal usw. Müssen wir die nicht von DB oder sonstwo beziehen?

            Guard.ArgumentNotEmpty(format, "format");

            NumberFormatInfo info = null;

            CultureInfo ci;

            if (provider == null)
            {
                provider = CultureInfo.GetCultureInfo(this.Currency.Region.Name).NumberFormat;
            }

            info = provider as NumberFormatInfo;
            if (info == null)
            {
                ci = provider as CultureInfo;
                if (ci != null)
                {
                    info = ci.NumberFormat;
                }
            }

            if (info != null)
            {
                info = (NumberFormatInfo)info.Clone();

                if (Currency != Currency.Empty)
                {
                    info.CurrencySymbol = useISOCodeAsSymbol ?
                                          Currency.ThreeLetterISOCode :
                                          Currency.Symbol.NullEmpty() ?? Currency.ThreeLetterISOCode;
                }
                else
                {
                    info.CurrencySymbol = "?";
                }
            }

            return(Value.ToString(format, info));
        }
Пример #30
0
        /// <summary>
        /// Parses the specified percentage value.
        /// </summary>
        /// <param name="value">The percentage value to parse.</param>
        /// <returns>Parsed percentage value as a <see cref="Double"/>.</returns>
        public object Parse(string value)
        {
            if (!StringUtils.HasText(value))
            {
                return(0d);
            }

            // there is no percentage parser in .NET, so we use currency parser to achieve the goal
            NumberFormatInfo fi = (NumberFormatInfo)formatInfo.Clone();

            fi.CurrencyDecimalDigits    = formatInfo.PercentDecimalDigits;
            fi.CurrencyDecimalSeparator = formatInfo.PercentDecimalSeparator;
            fi.CurrencyGroupSeparator   = formatInfo.PercentGroupSeparator;
            fi.CurrencyGroupSizes       = formatInfo.PercentGroupSizes;
            fi.CurrencyNegativePattern  = negativePatterns[formatInfo.PercentNegativePattern];
            fi.CurrencyPositivePattern  = positivePatterns[formatInfo.PercentPositivePattern];
            fi.CurrencySymbol           = formatInfo.PercentSymbol;

            return(Double.Parse(value, NumberStyles.Currency, fi) / 100);
        }
Пример #31
0
        public void Clone()
        {
            NumberFormatInfo format = new NumberFormatInfo();

            format.CurrencyDecimalSeparator = "string";

            NumberFormatInfo clone = (NumberFormatInfo)format.Clone();

            Assert.NotEqual(format.GetHashCode(), clone.GetHashCode());
            Assert.NotEqual(format, clone);
            Assert.NotSame(format, clone);

            Assert.Equal(format.CurrencyDecimalDigits, clone.CurrencyDecimalDigits);
            Assert.Equal(format.CurrencyDecimalSeparator, clone.CurrencyDecimalSeparator);
            Assert.Equal(format.CurrencyGroupSizes, clone.CurrencyGroupSizes);
            Assert.Equal(format.CurrencyGroupSeparator, clone.CurrencyGroupSeparator);
            Assert.Equal(format.CurrencyNegativePattern, clone.CurrencyNegativePattern);
            Assert.Equal(format.CurrencyPositivePattern, clone.CurrencyPositivePattern);
            Assert.Equal(format.IsReadOnly, clone.IsReadOnly);
        }
Пример #32
0
        public ToNumConverter(XmlNode node)
            : base(node)
        {
            numberFormat = CultureInfo.InvariantCulture.NumberFormat;
            String groupSep   = node.ReadStr("@groupsep", null);
            String decimalSep = node.ReadStr("@decimalsep", null);

            if (groupSep != null || decimalSep != null)
            {
                numberFormat = (NumberFormatInfo)numberFormat.Clone();
                if (groupSep != null)
                {
                    numberFormat.CurrencyGroupSeparator = groupSep; numberFormat.NumberDecimalSeparator = groupSep;
                }
                if (decimalSep != null)
                {
                    numberFormat.CurrencyDecimalSeparator = decimalSep; numberFormat.NumberDecimalSeparator = decimalSep;
                }
            }
        }