Beispiel #1
0
 /// <summary>
 /// Парсирует строку в количество с заданной точностью.
 /// </summary>
 /// <param name="s">Парсируемая строка.</param>
 /// <param name="quantum">Квант (точность).</param>
 /// <returns></returns>
 /// <param name="res">Результат парсинга.</param>
 public static bool TryParse(string s, Amount quantum, out Amount res)
 {
  res = Amount.Empty;
  decimal d;
  if(Decimal.TryParse(s.AsNumeric(), out d) == false)
   return false;
  res = new Amount(d, quantum);
  return true;
 }
Beispiel #2
0
 //-------------------------------------------------------------------------------------
 /// <summary>
 /// Парсирует строку в количество.
 /// </summary>
 /// <param name="s">Парсируемая строка.</param>
 /// <param name="res">Результат парсинга.</param>
 /// <returns></returns>
 public static bool TryParse(string s, out Amount res)
 {
  res = Amount.Empty;
  if(s == null)
   return false;
  decimal d;
  if(Decimal.TryParse(s.AsNumeric(), out d) == false)
   return false;
  res = new Amount(d);
  return true;
 }
Beispiel #3
0
 /// <summary>
 /// Парсирует строку в количество с заданной точностью.
 /// </summary>
 /// <param name="s">Парсируемая строка.</param>
 /// <param name="quantum">Квант (точность).</param>
 /// <returns></returns>
 public static Amount Parse(string s, Amount quantum)
 {
  decimal d;
  if(Decimal.TryParse(s.AsNumeric(), out d) == false)
   throw new PulsarException("'{0}' не является вещественным числом!", s);
  return new Amount(d, quantum);
 }
Beispiel #4
0
 /// <summary>
 /// Инициализирующий конструктор.
 /// </summary>
 /// <param name="val">Значение</param>
 /// <param name="quantum">Квант (точность)</param>
 public Amount(string val, Amount quantum) : this(Parse(val),quantum)  {  }
Beispiel #5
0
 /// <summary>
 /// Инициализирующий конструктор.
 /// </summary>
 /// <param name="val">Значение</param>
 /// <param name="quantum">Квант (точность)</param>
 public Amount(Amount val, Amount quantum) : this((decimal)val,quantum)  {  }
Beispiel #6
0
  /// <summary>
  /// Инициализирующий конструктор.
  /// </summary>
  /// <param name="val">Значение</param>
  /// <param name="quantum">Квант (точность)</param>
  public Amount(decimal val, Amount quantum)
  {
   m = 0;
   if(val < 0)
    throw new Exception("Количество не может быть отрицательным!");
   if(val < 0.001m)
    return;
   if(val > ((decimal)(uint.MaxValue >> 2)) / quantum.Divisor)
    throw new Exception("Переполнение значения!");

   uint res = (uint)(val * quantum.Divisor); // + ((uint)(val - (int)val) * 1000)/quantum.Divisor;
   Divisor = quantum.Divisor;
   // Усушка
   while(Divisor > 1)
   {
    if(res % 10 == 0)
    {
     res /= 10;
     Divisor /= 10;
    }
    else
     break;
   }
   if(res > (uint.MaxValue >> 2))
    throw new Exception("Переполнение значения!");
   m += (uint)(res << 2);
  }