Преобразовать десятичную в двойную?

создать пользовательскую кнопку в Java-коде, а в Xml, как показано ниже

Button bs_text[]= new Button[some_value];

    for(int z=0;z<some_value;z++)
        {
            try
            {

            bs_text[z]   =  (Button) new Button(this);

            }
            catch(ArrayIndexOutOfBoundsException e)
            {
                Log.d("ArrayIndexOutOfBoundsException",e.toString());
            }
        }
626
задан 32 revs, 26 users 13% 19 July 2019 в 01:39
поделиться

8 ответов

Явный бросок для удвоения как это не необходим:

double trans = (double) trackBar1.Value / 5000.0;

Идентификация константы как 5000.0 (или как 5000d) достаточна:

double trans = trackBar1.Value / 5000.0;
double trans = trackBar1.Value / 5000d;
424
ответ дан user4020527 19 July 2019 в 01:39
поделиться

Необходимо использовать 5000.0 вместо 5000.

47
ответ дан Paul Fleming 19 July 2019 в 01:39
поделиться

По-моему, желательно быть максимально явным. Это добавляет ясность к коду и помогает Вашим коллегам - программистам, которые могут в конечном счете считать его.

В дополнение к (или вместо) добавление .0 к числу, можно использовать decimal.ToDouble().

Вот некоторые примеры:

// Example 1
double transperancy = trackBar1.Value/5000;
this.Opacity = decimal.ToDouble(transperancy);

// Example 2 - with inline temp
this.Opacity = decimal.ToDouble(trackBar1.Value/5000);
57
ответ дан Paul Fleming 19 July 2019 в 01:39
поделиться

Почему Вы делитесь на 5 000? Просто установите Минимальные и Максимальные значения TrackBar между 0 и 100 и затем разделите Значение на 100 для процента Непрозрачности. Минимальные 20 примеров ниже препятствуют тому, чтобы форма стала абсолютно невидимой:

private void Form1_Load(object sender, System.EventArgs e)
{
    TrackBar1.Minimum = 20;
    TrackBar1.Maximum = 100;

    TrackBar1.LargeChange = 10;
    TrackBar1.SmallChange = 1;
    TrackBar1.TickFrequency = 5;
}

private void TrackBar1_Scroll(object sender, System.EventArgs e)
{
    this.Opacity = TrackBar1.Value / 100;
}
77
ответ дан Peter Mortensen 19 July 2019 в 01:39
поделиться

Ваш код хорошо работал в VB.NET, потому что он неявно делает любые броски, в то время как C# имеет и неявные и явные.

В C# преобразование из десятичного числа для удвоения является явным, поскольку Вы теряете точность. Например, 1.1 не может быть точно выражен как двойное, но может как десятичное число (см." Числа с плавающей точкой - более неточный, чем Вы думаете " по причине почему).

В VB преобразование было добавлено для Вас компилятором:

decimal trans = trackBar1.Value / 5000m;
this.Opacity = (double) trans;

то, Что (double) должен быть явно указан в C#, но может быть , подразумевало более 'прощающим' компилятором VB.

80
ответ дан Paul Fleming 19 July 2019 в 01:39
поделиться

Более универсальный ответ для универсального вопроса "Десятичное число по сравнению с Дважды?": Десятичное число для денежных вычислений для сохранения точности, Двойной для научных вычислений, которые не становятся затронутыми небольшими различиями. С тех пор Дважды тип, который является собственным к ЦП (внутреннее представление хранится в основа 2 ), вычисления, сделанные с Двойным, выполняют лучше тогда Десятичное число (который представлен в основа 10 внутренне).

121
ответ дан Sid M 19 July 2019 в 01:39
поделиться

Это походит this.Opacity, двойное значение, и компилятору не нравитесь Вы пытающийся переполнить десятичное значение в него.

55
ответ дан Paul Fleming 19 July 2019 в 01:39
поделиться

У Вас есть две проблемы. Во-первых, Opacity требует двойного, не десятичного значения. Компилятор говорит Вам что, в то время как существует преобразование между десятичным числом и дважды, это - явное преобразование, которое необходимо определить для него для работы. Второе - то, что TrackBar.Value целочисленное значение, и деление интервала интервалом приводит к интервалу, какому типу переменной Вы присваиваете его. В этом случае существует неявный бросок от интервала до десятичного числа или дважды - потому что нет никакой потери точности, когда Вы делаете бросок - таким образом, компилятор не жалуется, но значение, которое Вы получаете, всегда 0, по-видимому, так как trackBar.Value всегда меньше чем 5 000. Решение состоит в том, чтобы изменить Ваш код, чтобы использовать дважды (собственный тип для Непрозрачности) и сделать арифметику с плавающей точкой путем явного создания константы двойным - который будет иметь эффект продвижения арифметики - или кастинг trackBar.Value для удвоения, который сделает то же самое - или оба. О, и Вам не нужна промежуточная переменная, если она не использовала в другом месте. Мое предположение является компилятором, оптимизировал бы его далеко, так или иначе.

trackBar.Opacity = (double)trackBar.Value / 5000.0;
60
ответ дан Dez 19 July 2019 в 11:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: