C# : Parse string u float

Pozdrav,

imam problem kod parsanja vrijednosti (koja mi je u textBoxu) u ‘float’.
Primjer:

na win. formi jedan textBox - u koji recimo da se unese 0.55
ja to u kodu želim parsat u float, te onda spremit u bazu(u bazi mi je to polje tipa float).

kada upišem ovakvu vrijednost(0.55) on mi to pretvori u 55, i tako mi se spremi u bazu.

probao sam nekoliko načina(za parsanje), ali nijedan mi ne radi:

  1. float cijena = float.Parse(textBox1.Text);

  2. float cijena;
    float.TryParse(textBox1.Text, out cijena);

Ako netko zna rješenje, neka pomogne :slight_smile:

Da si ga upisao sa zarezom, vjerujem da bi dobio što si očekivao. Te funkcije obično predefinirano rade u skladu s regionalnim postavkama operacijskog sustava. U tvom slučaju moraš eksplicitno zadati funkciji što očekuješ.

“Float” tip je realiziran kao System.Single. Imaš i System.Double. Na MSDN-u si za jedan i drugi prouči oblike metode Parse koja prima argumente tipa NumberStyles, odn. IFormatProvider (hint: CultureInfo, evt. InvariantCulture).

To bi trebao pogledat, jer nisam toliko dobro upoznat sa tim; a što se tiče upisivanja sa ‘zarezom’, probao sam i tako, ali mi onda javi:
error converting varchar to float?

Ne, ne bi smio. Zapravo, napravi jednostavnu formu s jednim text-boxom i gumbom i dodaj ovo:
private void button1_Click( object sender, EventArgs e )
{
float f = float.Parse(textBox1.Text);
}
Postavi onda breakpoint na zatvorenu vitičastu zagradu i pogledaj vrijednost varijable f kada se debugger zaustavi. Dobit ćeš što treba ako upišeš sa zarezom.

Pogreška o kojoj ti govoriš je pogreška koju ti javi SQL server. On to javlja zato što ne koristiš parametrizirani upit, ovako
PARAMETER p FLOAT;
SELECT polje1 FROM tablica WHERE polje2 = p;

već direktno kreiraš SQL tekst ovako:

string SQL = "SELECT polje1 FROM tablica WHERE polje2 = " + f;

U tom slučaju ti C# implicitno dobro zapisani broj 0.55 natrag pretvori u tekstualni prikaz, ali ponovo u skladu s regionalnim postavkama, pa dobiješ ovakav string:

SELECT polje1 FROM tablica WHERE polje2 = 0,55

Naravno, ovaj string je izvorni programski kod za SQL server i on ga očekuje zapisanog u skladu sa sintaksnim pravilima tog jezika koji - slično kao i C# - očekuje da su literalne brojčane konstante zapisane s točkom, ovako:

SELECT polje1 FROM tablica WHERE polje2 = 0.55

Pogreška koju dobijaš je pogreška pri kompajliranju SQL naredbe, slična kao i ona koji bi dobio od C#-a prilikom kompajliranja slijedećeg isječka programskog koda:

float f = 0,55;

Uglavnom, sve možeš provjeriti koristeći debugger.
[hr][/hr]
Kada imaš problem kojeg ne možeš uhvatiti, implementaciju algoritma rastavi preko što više varijabli i onda debuggerom proučavaj međurezultate koji se pojavljuju u varijablama Znači, nemoj ovo:

SqlCommand command = new SqlCommand("SELECT polje1 FROM tablica WHERE polje2 = " + f);

Umjesto toga, ovo:

string strSQL = "SELECT polje1 FROM tablica WHERE polje2 = " + f;
SqlCommand command = new SqlCommand(strSQL);

Tako bi koračajući kroz naredbe gledao stanja varijabli i brzo otkrio gdje je problem.

Također kreni malo i odavde:

http://msdn.microsoft.com/en-us/library/yy6y35y8.aspx

Samo sam htio javit da sam rješio ovaj problem, i da mi je ovaj post koji si napisao puno pomogao.
Jer ja sam upisivao broj i sa ‘zarezom’, te gledao kroz debugger; i vidio da dobijem što želim, ali je bio
problem kod errora koji mi je Sql server javljao, a to sam rješio koristeći PARAMETER, kako si i napisao.

Hvala :slight_smile: