2016-11-08 117 views
0

我正在嘗試在進度條進度的特定增量處進行合理的播放。進度條最大爲80,由間隔爲100的計時器控制(因此總計持續時間爲8秒)。在第一種情況下,聲音播放是因爲80/16 = 5,這是一個整數,但沒有別的播放。如何將進度條值轉換爲雙精度值?或者甚至是正確的軌道?謝謝!如何將進度條的值更改爲雙精度?

  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

其次,當你把兩個整數的結果爲int。所以12/16 = 0。爲了使它正常工作,你應該這樣寫:

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

在這種情況下,'decimal'不會提供超過'double'的任何額外精度。 '13.0/16.0'具有「double」的確切表示形式。 – Kyle