Łukasz Gąsior
  • Home
  • now!
  • Blog
  • Po polsku
Social Links
Twitter
LinkedIn
Facebook
YouTube
Reddit
Instagram
GitHub
Medium
RSS
Łukasz Gąsior
  • Home
  • now!
  • Blog
  • Po polsku
  • Po polsku

Quick Tip: 05. waliduj dane w formacie w jakim je wyświetlasz

  • 2009-09-11
  • 2 komentarze
  • 2 minute read
  • 147 views

Często dane, które posiadamy musimy odpowiednio sformatować przed ich wyświetleniem.
Jeżeli takie dane musimy zwalidować, to warto zadbać, aby walidowane dane były  w takim samym formacie jak je wyświetlamy.
Prosty przykład:
Powiedzmy, że mamy metodę pobierającą kwotę faktury:
[sourcecode language=”csharp”] var invoiceBalance = GetInvoiceBalance();
[/sourcecode] Kwotę tą otrzymujemy z dokładnością do 4 miejsc po przecinku.
Jednak przez wyświetleniem formatujemy ją:
[sourcecode language=”csharp”] litInvoiceBalance.Text = invoiceBalance.ToString("C");
[/sourcecode] Co w wyświetli nam np. 100,00 zł.
Jak widać nasza zmienna wyświetlana jest z dokładnością do 2 miejsc po przecinku.
Dodatkowo załóżmy, że jeżeli pobrana kwota jest większa od 0, umożliwimy użytkownikowi zaznaczenie RadioButton’a, czyli:
[sourcecode language=”csharp”] if (invoiceBalance > 0)
{
rbMakePayment.Enabled = true;
}
[/sourcecode] Niby wszystko ok – aplikacja działa. Jeśli kwota jest większa od 0 możemy zaznaczyć RadioButton’a, a jeśli nie to nie możemy.
Problem pojawi się w sytuacji, kiedy nasza procedura zwróci np. 0,0010.
Co wówczas zrobi nasz program? Wyświetli 0,00 zł, ale jednocześnie pozwoli zaznaczyć RadioButton’a 🙁
Dzieje się tak, ponieważ 0,0010 zaokrąglone do dwóch miejsc po przecinku da nam 0,00, ale podczas walidowania kwota jest większa od zera.
Tego typu błędy są czasami ciężkie do wykrycia – kompilator nic nie zgłosi, a i sam błąd występuje rzadko.
Rozwiązaniem w tym przypadku jest zaokrąglenie naszej kwoty przed wyświetleniem i zwalidowaniem, czyli:
[sourcecode language=”csharp” highlight=”3″] var invoiceBalance = GetInvoiceBalance();
invoiceBalance = Math.Round(invoiceBalance, 2);
litInvoiceBalance.Text = invoiceBalance.ToString("C");
if (invoiceBalance > 0)
{
rbMakePayment.Enabled = true;
}
[/sourcecode] Warto zwrócić uwagę na takie sytuacje.

Share
Tweet
Share
Share
Related Topics
  • C#
  • Math.Round
You May Also Like
View Post
  • Po polsku

Software Craftsmanship Wrocław

  • 2017-06-06
View Post
  • Po polsku

Pilnuj typów danych

  • 2014-02-26
View Post
  • Po polsku

ReSharper Essentials – poszło!

  • 2014-02-21
View Post
  • Po polsku

Turbo-Mode Developera

  • 2014-02-19
View Post
  • Po polsku

Badanie usability by TechSmith

  • 2014-02-13
View Post
  • Po polsku

Global Windows Azure Bootcamp 2014

  • 2014-02-05
View Post
  • Po polsku

Quick tip: 12. Stosuj AsNoTracking() gdzie się da!

  • 2013-01-27
View Post
  • Po polsku

Quick tip: 11. Indexed views vs. SQL Server Express

  • 2012-07-23
2 comments
  1. Pingback: dotnetomaniak.pl
  2. Pingback: dotnetomaniak.pl

Comments are closed.

click & help!
Nakarm dziecko!
Follow me
RESHARPER ESSENTIALS
ReSharper Essentials
CODINGTV();
codingtv();
Twitter Feed
Categories
  • Azure Cloud (6)
  • Po polsku (104)
  • Windows (1)
Featured Posts
  • Azure Activity Log – Change History
    • 2020-09-29
  • Diagram Driven Cloud Infrastructure with Cloud Maker
    • 2020-09-22
  • Azure ARM template, but it is not JSON!
    • 2020-09-15
About
👍 Cloud | DevOps | Development | Technical Leadership | 📗Author of "ReSharper Essentials
© 2019 Łukasz Gąsior. All rights reserved.
hosted with ♥️ on webio | Polityka prywatności

Input your search keywords and press Enter.