2016-11-08 12 views
0

Я пытаюсь воспроизвести звук с определенным шагом хода выполнения. Индикатор выполнения имеет максимум 80 и управляется таймером, который имеет интервал 100 (при этом общая продолжительность составляет 8 секунд). В первом случае звук воспроизводится, потому что 80/16 = 5, который является целым числом, но больше ничего не играет. Как преобразовать значение progressbar в double? Или это даже правильный трек? Спасибо!Как изменить значение индикатора выполнения на двойной?

  if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (1/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (2/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (3/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (4/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (5/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (6/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (7/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (8/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (9/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (10/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (11/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (12/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (13/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (14/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (15/16))) 
       hiphopkick.Play(); 
      if (checkBox1.Checked && progressBar1.Value == (progressBar1.Maximum * (16/16))) 
       hiphopkick.Play(); 
+3

Вам нужно узнать о номерах. Все ваши фракции равны 0, потому что вы не понимаете целочисленное деление. И тестирование поплавков для равенства станет следующей причиной ошибки. – TaW

+0

Стандартная ловушка C#, вы используете целочисленное деление, чтобы вы всегда получали 0. Вместо этого используйте 1.0/16. Удаление скобок тоже будет работать. –

+0

Возможно, эта ссылка поможет вам о том, как это работает. http://stackoverflow.com/a/23822781/4323328 – tdog

ответ

0

Первое использование десятичной, а не двойной.

Binary floating point and .NET

Во-вторых, когда вы делите два целых результат внутр. Итак, 12/16 = 0. Чтобы он работал правильно, напишите его следующим образом:

var decimalRes = progressBar1.Maximum * (13/(decimal)16); 
+1

В этом случае 'decimal' не предоставляет дополнительной точности над' double'. '13.0/16.0' имеет точное представление как' double'. – Kyle