kzen.dev
  • Întrebări
  • Tag-uri
  • Utilizatori
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
Eggs McLaren
Eggs McLaren
Question

Conversia Zecimal la Dublu

Vreau să folosesc un track-bar pentru a schimba o forma's opacitate.

Acesta este codul meu:

decimal trans = trackBar1.Value / 5000;
this.Opacity = trans;

Când am construi la cerere, se da urmatoarea eroare:

nu Poate converti implicit de tip zecimal` la "dublu"

Am încercat, folosind "trans" și "dublu" dar atunci de control nu't de lucru. Acest cod a funcționat bine în trecut VB.NET proiect.

640 2008-07-31T21:42:52+00:00 13
AbdelAziz AbdelLatef
AbdelAziz AbdelLatef
Întrebarea editată 3 septembrie 2019 в 5:25
Programare
c#
floating-point
type-conversion
decimal
double
Popular videos
Impartirea fractiilor zecimale (Clasa a V-a)
Impartirea fractiilor zecimale (Clasa a V-a)
3 ani în urmă
Împărțirea fracțiilor (numerelor) zecimale | Lectii-Virtuale.ro
Împărțirea fracțiilor (numerelor) zecimale | Lectii-Virtuale.ro
2 ani în urmă
Fractii zecimale. Inmultirea si impartirea.
Fractii zecimale. Inmultirea si impartirea.
9 ani în urmă
Cum se leaga in doza un intrerupator dublu cu 2 lampi
Cum se leaga in doza un intrerupator dublu cu 2 lampi
3 ani în urmă
Impartirea a doua numere naturale cu rezultat fractie zecimala
Impartirea a doua numere naturale cu rezultat fractie zecimala
4 ani în urmă
15 - Lista dublu inlantuita - Conceptul de lista dubla
15 - Lista dublu inlantuita - Conceptul de lista dubla
5 ani în urmă
Fractii zecimale finite. Adunarea si scaderea fractiilor zecimale..
Fractii zecimale finite. Adunarea si scaderea fractiilor zecimale..
9 ani în urmă
Transformarea fractiilor ordinare in fractii zecimale
Transformarea fractiilor ordinare in fractii zecimale
3 ani în urmă
CONVERSIA din Dubă DHL / Autoutilitară in CAMPERVAN / AUTORULOTA
CONVERSIA din Dubă DHL / Autoutilitară in CAMPERVAN / AUTORULOTA
2 ani în urmă
Matematică; cl. X "Formulele unghiului dublu"
Matematică; cl. X "Formulele unghiului dublu"
3 ani în urmă
Conversie dubita in autorulota | 6 intrebari tehnice despre conversia autorulotei
Conversie dubita in autorulota | 6 intrebari tehnice despre conversia autorulotei
3 ani în urmă
Transformarea fractiilor ordinare in fractii zecimale.
Transformarea fractiilor ordinare in fractii zecimale.
9 ani în urmă
KIT conversie VOLANT - de la masă dublă la masă simplă - EFECTE
KIT conversie VOLANT - de la masă dublă la masă simplă - EFECTE
3 ani în urmă
Impartirea fractiilor zecimale (5c71)
Impartirea fractiilor zecimale (5c71)
11 ani în urmă
Transformarea fractiilor zecimale periodice in fractii ordinare (5c56).wmv
Transformarea fractiilor zecimale periodice in fractii ordinare (5c56).wmv
11 ani în urmă
« Anterior
Următor »
Solution / Answer
Kevin Dente
Kevin Dente
31 iulie 2008 в 10:17
2008-07-31T22:17:57+00:00
Mai mult
Sursă
Editează
#8406058

O explicit exprimate la "dublu" ca e't este necesar:

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

Identificarea constantă ca 5000.0 (sau 5000d) este suficientă:

double trans = trackBar1.Value / 5000.0;
double trans = trackBar1.Value / 5000d;
Suren Srapyan
Suren Srapyan
Răspuns editat 21 octombrie 2019 в 2:03
432
0
 huseyint
huseyint
1 august 2008 в 2:23
2008-08-01T14:23:28+00:00
Mai mult
Sursă
Editează
#8406060

O mai generic răspuns pentru întrebare generică "Zecimal vs Dublu?": Zecimal pentru calculele monetare pentru a păstra precizie, Dubla pentru calcule științifice care nu obține afectate cu mici diferențe. Deoarece Dubla este un tip care este nativ pentru CPU (reprezentare internă sunt stocate în baza 2), calcule făcute cu Dublu efectua mai bine atunci Zecimal (care este reprezentat în baza 10 pe plan intern).

Sid M
Sid M
Răspuns editat 11 iulie 2014 в 2:42
121
0
 Keith
Keith
10 august 2008 в 5:54
2008-08-10T17:54:27+00:00
Mai mult
Sursă
Editează
#8406062

Codul a lucrat bine în VB.NET pentru că, implicit, nu orice aruncă, în timp ce C# are atât implicite și explicite.

În C# conversia din zecimal în dublă este explicit ca pierzi precizie. De exemplu 1.1 poate't fi exprimat cu precizie ca o dublă, dar poate ca o zecimală (a se vedea "numere în virgulă mobilă - mai inexact decât crezi" pentru motivul de ce).

În VB de conversie a fost adaugat pentru tine de compilator:

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

Că (dublu) trebuie să fie menționat în mod explicit în C#, dar pot fi implicit de VB's mai 'iertător' compiler.

Business vs Programming: Floating point numbers - more inaccurate than you think
I recently came across a problem with floating point numbers. I know there are some inherent inaccuracies, but I was surprised to find a pr...
bizvprog.blogspot.com
80
0
Gordon Bell
Gordon Bell
21 septembrie 2008 в 3:51
2008-09-21T03:51:01+00:00
Mai mult
Sursă
Editează
#8406063

De ce te împărțirea de 5000? Doar seta TrackBar's valorile Maxime și Minime între 0 și 100 și apoi împărțiți Valoarea de 100 de Opacitate procentuale. Minim 20 exemplul de mai jos previne formă de a deveni complet invizibil:

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;
}
Peter Mortensen
Peter Mortensen
Răspuns editat 1 august 2015 в 12:51
77
0
 tvanfosson
tvanfosson
27 februarie 2009 в 11:45
2009-02-27T11:45:40+00:00
Mai mult
Sursă
Editează
#8406065

Aveți două probleme. În primul rând, Opacitate necesită o dublă, nu o valoare zecimală. Compilatorul este de a spune că în timp ce există o conversie între zecimal și dublu, este o conversie explicită de care aveți nevoie să specificați în comandă pentru a funcționa. Al doilea este că TrackBar.Valoarea este o valoare întreagă și împărțind-o int de un int rezultatele într-un int indiferent de ce tip de variabilă atribuiți-l la. În acest caz, există o implicit cast la int la decimal sau double - pentru că nu există nici o pierdere de precizie atunci când faci cast - deci compilatorul nu't se plâng, dar valoarea pe care o obține este întotdeauna 0, probabil, dintrackBar.Valoarea este întotdeauna mai mică decât 5000. Soluția este de a schimba codul de a utiliza dublu (nativ tip de Opacitate) și de a face în virgulă mobilă aritmetică explicit de a face constant un dublu - care va avea ca efect promovarea aritmetică - sau turnare `trackBar.Valoarea sa de dublu, care va face același lucru - sau ambele. Oh, și tu nu't nevoie de variabile intermediare dacă este utilizat și în altă parte. Parerea mea este compilatorul ar optimiza departe, oricum.

trackBar.Opacity = (double)trackBar.Value / 5000.0;
 Dez
Dez
Răspuns editat 22 februarie 2018 в 4:40
60
0
 andnil
andnil
5 august 2008 в 8:18
2008-08-05T20:18:30+00:00
Mai mult
Sursă
Editează
#8406061

În opinia mea, este de dorit să fie cât mai explicit posibil. Acest lucru aduce un plus de claritate a codului și ajută colegii programatori care ar putea în cele din urmă a citit-o.

În plus față de (sau în loc de) adăugarea unui .0 la număr, puteți folosi zecimale.ToDouble()`.

Aici sunt câteva exemple:

// 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
0
Ryan Fox
Ryan Fox
1 august 2008 в 1:53
2008-08-01T13:53:06+00:00
Mai mult
Sursă
Editează
#8406059

Se pare ca asta.Opacitatea este o valoare dublă, iar compilatorul nu't ca tine încercarea de a se ghiftui o valoare zecimală în ea.

55
0
 Dinah
Dinah
20 noiembrie 2008 в 2:36
2008-11-20T14:36:42+00:00
Mai mult
Sursă
Editează
#8406064

Ar trebui să utilizați 5000.0 "în loc de" 5000.

47
0
Darin Dimitrov
Darin Dimitrov
31 august 2011 в 7:08
2011-08-31T19:08:26+00:00
Mai mult
Sursă
Editează
#8406066

De Opacitate proprietatea este de tip double:

double trans = trackBar1.Value / 5000.0;
this.Opacity = trans;

sau pur și simplu:

this.Opacity = trackBar1.Value / 5000.0;

sau:

this.Opacity = trackBar1.Value / 5000d;

Observați că eu sunt, folosind 5000.0 "(sau " 5000d) pentru a forța un dublu divizia pentru că trackBar1.Valoarea este un număr întreg și se va efectua un număr întreg de divizie, iar rezultatul va fi un număr întreg.

45
0
 ChrisF
ChrisF
31 august 2011 в 7:09
2011-08-31T19:09:50+00:00
Mai mult
Sursă
Editează
#8406067

Presupunând că utilizați WinForms, Forma.Opacitate este de tip "dublu", așa că ar trebui să utilizați:

double trans = trackBar1.Value / 5000.0;
this.Opacity = trans;

Dacă nu aveți nevoie de valoarea în altă parte, l's simplu să scrie:

this.Opacity = trackBar1.Value / 5000.0;

Motivul pentru care controlul nu't de lucru atunci când ți-ai schimbat codul pentru a fi pur și simplu un dublu fost pentru că ai avut:

double trans = trackbar1.Value / 5000;

care a interpretat 5000 ca un întreg, și pentru că trackbar1.Valoarea este, de asemenea, un număr întreg tău "trans" valoare a fost întotdeauna zero. În mod explicit a face numeric, o valoare în virgulă mobilă prin adăugarea.0` compilatorul poate interpreta ca o dublă și de a efectua calcul corespunzătoare.

 ChrisF
ChrisF
Răspuns editat 9 ianuarie 2019 в 11:20
45
0
Danny Fox
Danny Fox
6 martie 2012 в 8:07
2012-03-06T08:07:53+00:00
Mai mult
Sursă
Editează
#8406068

Cea mai bună soluție este:

this.Opacity = decimal.ToDouble(trackBar1.Value/5000);
39
0
 Darryl
Darryl
13 mai 2012 в 2:10
2012-05-13T02:10:25+00:00
Mai mult
Sursă
Editează
#8406069

Din Opacitate` este o valoare dublă, mi-ar folosi doar un dublu de la început și nu arunca deloc, dar asigurați-vă că pentru a utiliza un dublu când împărțirea, astfel încât să don't pierde orice precizie

Opacity = trackBar1.Value / 5000.0;
39
0
 eaponz
eaponz
11 aprilie 2013 в 3:08
2013-04-11T15:08:35+00:00
Mai mult
Sursă
Editează
#8406070
this.Opacity = trackBar1.Value / 5000d;
Christian Gollhardt
Christian Gollhardt
Răspuns editat 20 decembrie 2014 в 5:18
33
0
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
Utilizatori
Toate
Nou
Populare
1
工藤 芳則
Înregistrat 6 zile în urmă
2
Ирина Беляева
Înregistrat 1 săptămână în urmă
3
Darya Arsenyeva
Înregistrat 1 săptămână în urmă
4
anyta nuam-nuam (LapuSiK)
Înregistrat 1 săptămână în urmă
5
Shuhratjon Imomkulov
Înregistrat 1 săptămână în urmă
DE
ES
FR
ID
KO
PT
RO
RU
ZH
© kzen.dev 2023
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire