Diskuze: double v C#, C++
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 17 zpráv z 17.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Není problém až u zobrazení? Kdyžtak nahoď kód, jak si ty čísla předáváš.
Zde je malá ukázka
double tmp_a = 16;
double t = (double)tmp_a / 24;
Console.WriteLine(t.ToString("0.###############"));
Když knihovnu zavolám z C#, vrátí se vše v pořádku (0.66666666667). Ale pokud ji zavolám z C++, vrátí se např. 0.6666687452.
Pokud přehlídnu tu podivnost, proč by měl člověk volat z C++ C# kód, tak tam může být nějaký problémek jak chápou jednotlivé jazyky čísla s plovoucí čárkou.
Zkus velikosti datových typů. Ověř kolik míst je pro desetinnou čárku pro jednotlivé jazyky či zvol jiný datový typ.
Neviem ako to riešiš v c++, ale to vychádza z céčka a tam to funguje presne ako má.
No ta aplikace v C++ není moje, já k ní dělám pouze rozšíření.
Asi tam místo double dám decimal - to funguje.
Ano, to funguje. Ale mě nějak nefunguje přenos double z C# do C++
Ešte máš možnosť preniesť to ako string a potom ho prekonvertovať na double.
A to máš zadáno, že rozšíření musí být v C#?
Napsání ho v C++ a přeložení na stejném překladači by zřejmě
vyřešilo tvé problémy.
Díky za tip. Ale bohužel jsem zjistil, že již to dělení vrátí nepřesné číslo. Teď už fakt nevim kde je problém.
Ano to by vyřešilo, ovšem knihovna má několik tisíc řádků a převádět to do C++...
...již to dělení vrátí nepřesné číslo...
to myslíš v ktorom jazyku?
Ty si napísal funkčné delenie v c# a ja v c (to isté sa dá použiť v
c++).
Takhle:
Knihovna je v C#, a v ní je funkce:
double Vydel()
{
double tmp_a = 16;
double t = (double)tmp_a / 24;
return t;
}
Pokud tu knihovnu spustím z aplikace napsané v C#, dostanu
0.66666666667.
Pokud ji spustím v aplikaci napsané v C++, dostanu (např.) 0.6666687452 a
nikdy přesně to, co chci (0.66666666667).
Jo a ještě: to C++ je Win32.
Pro případ že bys neuměl dobře anglicky si to hoď to překladače.
...but again there is no simple way to get the C# compiler to reproduce the old C++ results
Nemohlo by to byť nejak takto?
string Vydel(double x, double y)
{
return (x / y).ToString();
}
Díky za rady, toto ale bohužel nefunguje, již jsem to zkoušel.
Zobrazeno 17 zpráv z 17.