private Money?ConvertAmount(decimal?amount, CalculatorContext context, TaxRate taxRate, bool isFinalPrice, out Tax?tax) { tax = null; if (amount == null) { return(null); } var options = context.Options; // A product price cannot be less than zero. if (amount < 0) { amount = 0; } if (amount != 0) { tax = options.IsGrossPrice ? _taxCalculator.CalculateTaxFromGross(amount.Value, taxRate, options.TaxInclusive, options.RoundingCurrency) : _taxCalculator.CalculateTaxFromNet(amount.Value, taxRate, options.TaxInclusive, options.RoundingCurrency); amount = tax.Value.Price; } var money = _currencyService.ConvertFromPrimaryCurrency(amount.Value, options.TargetCurrency); if (amount != 0 && options.TaxFormat != null) { money = money.WithPostFormat(options.TaxFormat); } if (isFinalPrice && context.HasPriceRange) { var finalPricePostFormat = money.PostFormat; finalPricePostFormat = finalPricePostFormat == null ? options.PriceRangeFormat : string.Format(options.PriceRangeFormat, finalPricePostFormat); if (money.PostFormat != finalPricePostFormat) { money = money.WithPostFormat(finalPricePostFormat); } } return(money); }