【问题标题】:How to change the value of a progress bar to a double?如何将进度条的值更改为双精度值?
【发布时间】:2023-04-09 23:06:01
【问题描述】:

我正在尝试以进度条进度的特定增量播放声音。进度条的最大值为 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();

【问题讨论】:

  • 你需要了解数字。你所有的分数都是0,因为你不了解整数除法。测试浮点数是否相等将是下一个错误原因..
  • 标准 C# 陷阱,您使用的是整数除法,因此您将始终得到 0。请改用 1.0 / 16。删除括号也可以。
  • 也许这个链接可以帮助你了解它是如何工作的。 stackoverflow.com/a/23822781/4323328

标签: c# progress-bar typeconverter


【解决方案1】:

首先使用十进制,而不是双精度。

Binary floating point and .NET

第二次当你将两个整数相除时,结果就是整数。所以12/16 = 0。为了让它正常工作,你应该这样写:

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

【讨论】:

  • 在这种情况下,decimal 不会比double 提供任何额外的精度。 13.0 / 16.0 的精确表示为 double
猜你喜欢
  • 1970-01-01
  • 2022-10-01
  • 2011-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-28
  • 2012-11-07
  • 2017-05-14
相关资源
最近更新 更多