Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Czy to jakis BUG? - isnumeric
Ravender




Typ: neutral
Postów: 30
Zarejestrowany: Feb 2005
Czy to jakis BUG? - isnumeric

Wstawcie sobie textboxa i teraz kod do niego

if isnumeric(val(text1.text)) = true then me.caption = "numer"

teraz wpiszcie do text boxa  1.5 a potem 1,5 

czy to BUG? u mnei isnumeric nie rozpoznaje 1.5 jako liczbe, natomiast jako liczbe rozpoznaje 1,5 co liczbą nie jest.. o co chodzi?

[Post edytowany dnia 11-02-2005 00:02 przez Ravender]

11-02-2005 00:01
Pokaż profil Ravender  Wyślij email do Ravender   Odwiedź stronę Ravender       2854667
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

to jest wina chyba funkcji Val - pieprzone standardy, w których w polsce za oddzielenie ułamka od reszty jest ",", a w anglii - ".". Funkcja Val najprawdopodobniej korzystając z tych standardów ucina text do ".". A spróbuj bez "Val"


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

11-02-2005 01:30
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
Usercontrol
mr. Tom



Typ: neutral
Postów: 191
Zarejestrowany: Oct 2003

Ja bym na twoim miejscu napisał własną instrukcje zprawdzającą. Niedawno zrobiłem taką, tyle że nie obsługuje znaków innych niż 0-9.
Jak chcesz, to ją sobie rozbuduj.

Function IsNumer(strValue As String) As Boolean
Dim j As Variant
IsNumer = True
For j = 1 To Len(strValue)
    If Mid(strValue, j, 1) >= 0 And Mid(strValue, j, 1) <= 9 Then
       
    Else
        IsNumer = False
        Exit For
        Exit Function
    End If
Next j

End Function

Za wynikłe szkody z używania tego kodu nie odpowiadam[...]

11-02-2005 09:52
Pokaż profil Usercontrol  Wyślij email do Usercontrol   Odwiedź stronę Usercontrol       1518548
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

Tylko nie wiem co da napisanie własnej funkcji! Przecież funkcja IsNumeric działa dobrze! To "Val" zmienia kropki na przecinki!


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

11-02-2005 14:30
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
Ravender




Typ: neutral
Postów: 30
Zarejestrowany: Feb 2005

Jeszcze jeden eksperyment:

Wstawcie sobie textboxa i jeden guzik..

Eksperyment 1

kod:
Dim liczba As Single
Private Sub Command1_Click()
liczba = Text1.Text
Me.Caption = liczba
End Sub

po wpisaniu do tekst boxa

1.5  dostajemy TYPE MISMATCH
1,5  dostajemy 1,5

Eksperyment 2

kod:
Dim liczba As Single
Private Sub Command1_Click()
liczba = val(Text1.Text)
Me.Caption = liczba
End Sub

po wpisaniu do tekst boxa

1.5  dostajemy 1,5 (1,5 nie jest liczba)!!!
1,5  dostajemy 1

===============================
TO wszystko sie kupy nie trzyma
W eksperymencie pierwszym wpisujac do zmiennej LICZBA 1.5 dostajemy bład TYpe mismatch! czyli po wpisaniu do zmiennej single liczby 1.5 jest bład.. to bez sensu

Po wpisaniu do zmiennej single 1,5 (czyli ciagu znakow) wszystko jest ok ..

Faktycznie wygląda to na problem standartow. Jak myslicie, pisac do Microsoftu w tej sprawie? .

11-02-2005 17:21
Pokaż profil Ravender  Wyślij email do Ravender   Odwiedź stronę Ravender       2854667
Ravender




Typ: neutral
Postów: 30
Zarejestrowany: Feb 2005

Wygląda na to, ze rozwiazalem to cale zamieszanie..

Panel sterowania -> Opcje regionalne i jezykowe

w panelu Opcje regionalne guzik DOSTOSUJ i zmienic symbol dziesietny z "," na "."

Po tej zmianie isnumeric obie formy traktuje jako liczby tj.. 1.5 i 1,5
ALE
operacje dodawania i inne mozemy robic tylko na kropkach, czyli po wpisaniu w kodzie programu np 1,5 + 1,5  kompilator wysypie bład.

[Post edytowany dnia 11-02-2005 17:29 przez Ravender]

11-02-2005 17:25
Pokaż profil Ravender  Wyślij email do Ravender   Odwiedź stronę Ravender       2854667
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Nie sądzę, by był to jakiś bug:
1) Val jako znak oddzielający rozwinięcie dziesiętne rozpoznaje "." i tylko ten znak (i jest to zaznaczone wyraźnie w MSDN)

2) IsNumeric, CSng i CDbl rozpoznają "." i ","

Jeśli jest tam jakiś bug, to jest nim fakt, że to:
liczba = Text1.Text
działa dla "1,5" (także powinno wywalać Type Mismatch)

3) Val nie zmienia kropek na przecinki - Val wogóle nic nie zmienia w tym zakresie, bo nie zwraca Stringów.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

11-02-2005 18:59
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Wszystkich odpowiedzi: 6 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1