Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Tadeáš Burda
Brigádník
Avatar
Tadeáš Burda :3.8.2019 13:15

Vo View mám takýto vstup pre zadávanie ceny(float):

<div class="form-group">
    <label asp-for="Price" class="control-label"></label>
    <input asp-for="Price" type="number" min="0.5" step="0.5" class="form-control" />
    <span asp-validation-for="Price" class="text-danger"></span>
</div>

Je to napojene na tento model:

[Display(Name = "Cena")]
[Required(ErrorMessage = "Vyplňte obsah")]
public float Price { get; set; }

Problém je že mi ide vložiť iba cele číslo.

Zkusil jsem: Pridal sem tam step="0.5" (rada z netu). Skúsil sem zmeniť na double/ decimal ale hádže to rovnakú chybu. Môžem si to nechať vložiť jak string a potom si to cez float.Parse() spraviť sám ale to je zbytočná robota naviac. Na forach pisaly neco otem že je to pre rozdielny zapis cisla podla krajiny, tak sem este do <html> pridal lang="sk" ale to byl len taký vystrel naslepo. Ešte sem rozmýšľal že by sa asi mohlo niekde zadať string.Format ale nepodarilo sa mi dohledat kde a ci to vôbec ide.

Chci docílit: Potrebujem na vstupe aby mohol užívateľ zadať cenu( "," neni poviná) a ta sa mi uložila do modelu.

 
Odpovědět
3.8.2019 13:15
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Tadeáš Burda
Martin Petrovaj:3.8.2019 13:19

Nie som si celkom istý čo za problém s tým môžeš mať. Nebude to desatinnou čiarkou? S bodkou to (aspoň mne) funguje správne

https://jsfiddle.net/wutfjkq6/

Editováno 3.8.2019 13:20
Nahoru Odpovědět
3.8.2019 13:19
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Martin Petrovaj
Tadeáš Burda :3.8.2019 13:31

Tá desatina čiarka tam neni, to len Chrom mi to upravuje aby to tak vyzeralo. Napozadi tam je 3.5 , skúšal sem to v Edge, IE, Chrom. Všade to vyhadzuje to iste. No ani ja nechápem kde je problém :D , lebo očividne by tam byt nemnel.

 
Nahoru Odpovědět
3.8.2019 13:31
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Tadeáš Burda
Martin Petrovaj:3.8.2019 13:53

Skús upraviť kultúru tak, aby bola všade rovnaká. V súbore web.config budeš chcieť mať niečo takéto:

<configuration>
  <system.web>
    <globalization culture="en" uiCulture="en" />

Rovnaký jazyk chceš mať uvedený aj v HTML. Môžeš si ho potom upraviť na aký chceš, základom je, aby sa nestávalo, že napr. na frontende neprejde validáciou čiarka a na serveri neprejde bodka.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
3.8.2019 13:53
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Martin Petrovaj
Tadeáš Burda :3.8.2019 14:14

Dík, pomohlo to. Ja nato dosel pred minutu tes :DD , lebo mam db a tam sa mi ten float zapisuje z ",", takze problem byl asi vtem ze VS pomen chcelo cislo z carku a ten input zase z "." . MOhel by si mi este poradit ze jak donutim svoju db papat cisla z bodku? :D Lebo teraz mi to pada natem.

 
Nahoru Odpovědět
3.8.2019 14:14
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Tadeáš Burda
Martin Petrovaj:3.8.2019 14:24

Ak to budeš posielať do DB ako float a používaš nejaké zmysluplné ORM tak si myslím, že by to predsa malo fungovať aj tak… Ak nie, tak jednoducho použi

Price.ToString().Replace('.', ',');
Nahoru Odpovědět
3.8.2019 14:24
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Martin Petrovaj
Tadeáš Burda :3.8.2019 14:33

SQL ... Teraz sem to kukal cez debug v konzoly a jo je to tak ze mam ten float 3.5 a ked sa uložý do tabulky tak tam je 3,5 . Problem je ze ked potom nacitam Index z tabulku dat, tak pri tahani dat z tabulky mi to vyhodi InvalidCastEx­ception: Unable to cast object of type 'System.Double' to type 'System.Single'.. VS mi stejnak nedovoli ani v kode zapisat float f = 3,5f; . Skusim kuknut net co najdem, každopádne dik zapomoc

 
Nahoru Odpovědět
3.8.2019 14:33
Avatar
Martin Petrovaj
Tvůrce
Avatar
Martin Petrovaj:3.8.2019 14:40

Nepomohlo by?

public double Price { get; set; }

a píše sa keď už tak float f = 3.5f; (vždy s bodkou)

Editováno 3.8.2019 14:40
Nahoru Odpovědět
3.8.2019 14:40
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Martin Petrovaj
Tadeáš Burda :3.8.2019 14:53

Káááámo ty si fak BOH!!! (v) Jo to bylo ono :DDD Boze...je tam napsane
[Price] FLOAT (53) NOT NULL , nechapem proc to chce double este ked to tam vkladam ve float. To je jedno, fak dik moc....(potlesk)

 
Nahoru Odpovědět
3.8.2019 14:53
Avatar
Odpovídá na Tadeáš Burda
Michal Štěpánek:3.8.2019 14:59

Osobně radši používám na cenu datový typ decimal...

Nahoru Odpovědět
3.8.2019 14:59
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Tadeáš Burda
Martin Petrovaj:3.8.2019 16:52

https://docs.microsoft.com/…transact-sql?…
https://docs.microsoft.com/…umeric-types

Ak sa pozrieš na presnosť floatu v SQL a dátových typov pre desatinné čísla v C# (a tým pádom aj na ich veľkosť), tak zistíš, že C# float ti pre dáta z tvojej databázy nemusí stačiť. Preto ti tá konverzia padala, potreboval si aspoň double (a je dobrý zvyk pri práci s financiami používať skôr decimal, ako písal Michal).

Videl si to aj v tej chybovej hláške:
InvalidCastEx­ception: Unable to cast object of type 'System.Double' to type 'System.Single'
Píše sa tam, že zlyhala konverzia (resp. cast, aby sme boli presní) z typu double na single (System.Single == float). Vieš, že problém s dátami nastáva v smere DB > aplikácia. Tu už ale potrebuješ vedieť rozdiel medzi single / float a double, ktorý je v ich kapacite, a ktorá bola v tvojom prípade na správnu konverziu nepostačujúca.

Nahoru Odpovědět
3.8.2019 16:52
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Tadeáš Burda
Brigádník
Avatar
Odpovídá na Martin Petrovaj
Tadeáš Burda :3.8.2019 17:18

Ja tej chybovej hláške úplne nerozumel, len to že je problém konverziu. Hlavne tomu že z db mi ide double, pritom v designeru je to ukázane jak float. Ešte sem sa stým nestretol. To stu čiarku v db to byla test blbost už sem si to dohledal. To len VS mňa to nútilo tak zapisovať lebo mam win v slovenčine. Dost mňa to zmiatlo a po 6h za PC sem sa nato strašne namotal :D Prepíšem to teda na decimal jestli je to best practice, abych si nato navikel. Osobne neco taketo robym prvy krat takze mam steho dost gulas. Ale diki zapomoc

 
Nahoru Odpovědět
3.8.2019 17:18
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.