Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[C#] Vraag over variable

Pagina: 1
Acties:
  • 48 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik ben bezig met zelf een programma te schrijven waarmee ik Body Mass Index kan uitrekenen.
De formule voor Bodymass index is gewicht gedeeld door het kwadraat van lichaamslengte
Mijn proefpersoon heeft een gewicht van 80kg met een lengte van 1.72m
Hij komt dus uit op 27% BodyMassIndex alleen ik krijg dit niet in mijn programma bij mij komt deze telkens op 0.0027...... etc uit.
Wat doe ik verkeerd? Ik gebruik een decimal en ik heb ook wel double geprobeerd, het lijkt erop alsof hij de punt tussen 1 en 72 van de lichaamslengte niet gebruikt, hoe kan ik dit oplossen?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14:23

gorgi_19

Kruimeltjes zijn weer op :9

Er een komma van maken of de goede CultureInfo goed zetten.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • remco_k
  • Registratie: April 2002
  • Laatst online: 08:28

remco_k

een cassettebandje was genoeg

Door het betreffende stuk code te posten zodat wij daadwerkelijk zien wat je aan het doen bent.

Alles kan stuk.


  • Invisible_man
  • Registratie: Juni 2006
  • Nu online
Waarschijnlijk is het probleem dus dat jouwn komma niet aangezien wordt als de "decimaal-scheider", maar als de "duizendtal-sheider". Dit kan je oplossen door van de komma in de invoer string een punt te maken, of de instelling van wat .net aanziet voor decimaal - of duizendtalsheider te weiziggen.

  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 30-11 21:50
code:
1
2
3
4
5
6
double weight = 80.0;
double length = 1.72;

double bmi = weight / System.Math.Pow(length, 2.0);

textBox1.Text = string.Format(CultureInfo.CurrentUICulture, "{0:F2}", bmi);


Geeft netjes 27.04 in het textboxje.

Check elke parameter die je doorgeeft aan de uiteindelijke bmi berekening...

Verwijderd

Topicstarter
Nou die getallen zijn een voorbeeld, ik wil dat hij het met elk willekeurig gewicht en lengte doet

Code:
using System;
using System.Collections.Generic;
using System.Text;

namespace BMIBerekening
{
class Program
{
static void Main(string[] args)
{


//Voer gewicht in
Console.Write("Enter weight:");
string Weight = Console.ReadLine();
decimal weight = Convert.ToDecimal(Weight);
if (weight < 0)
{
//gewicht kan nooit negatief zijn
Console.WriteLine("Weight cannot be negative");
weight = 0;
}
//Lichaamslengte
Console.Write("Enter bodylength:");
string BodyLength = Console.ReadLine();
decimal bodyLength = Convert.ToDecimal(BodyLength);
if (bodyLength < 0)
{
//Lichaamslengte kan nooit negatief zijn
Console.WriteLine("Bodylength cannot be negative");
bodyLength = 0;
}

//Bereken BMI
decimal BMI;
BMI = weight / (bodyLength * bodyLength);


Console.WriteLine();
Console.WriteLine("Weight =" + weight);
Console.WriteLine("BodyLength =" + bodyLength);
Console.WriteLine();
Console.WriteLine("BMI =" + BMI + "%");


Console.WriteLine("Press Enter to terminate...");
Console.Read();


}
}
}

Verwijderd

Topicstarter
Het is OPGELOST
Moest een komma opvoeren ipv een nul
Thanks

Verwijderd

if (bodyLength < 0)
{
//Lichaamslengte kan nooit negatief zijn
Console.WriteLine("Bodylength cannot be negative");
bodyLength = 0;
}
Even wat anders:
Als ik jou was zou ik bij deze check de lengte niet op nul zetten, krijg je een BMI van ∞, hetgeen me niet de bedoeling lijkt.

Verwijderd

Topicstarter
ja dat is ook een goede, weet iemand toevallig wat de code is om dit af te vangen (hiermee bedoel ik dus het verhaal van die punt en de komma)
het heeft met de regional settings te maken.

[ Voor 19% gewijzigd door Verwijderd op 15-08-2007 15:18 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 14:23

gorgi_19

Kruimeltjes zijn weer op :9

Verwijderd schreef op woensdag 15 augustus 2007 @ 15:17:
ja dat is ook een goede, weet iemand toevallig wat de code is om dit af te vangen (hiermee bedoel ik dus het verhaal van die punt en de komma)
het heeft met de regional settings te maken.
gorgi_19 schreef op woensdag 15 augustus 2007 @ 14:45:
Er een komma van maken of de goede CultureInfo goed zetten.
:?

[ Voor 36% gewijzigd door gorgi_19 op 15-08-2007 15:31 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Verwijderd schreef op woensdag 15 augustus 2007 @ 15:17:
ja dat is ook een goede, weet iemand toevallig wat de code is om dit af te vangen (hiermee bedoel ik dus het verhaal van die punt en de komma)
het heeft met de regional settings te maken.
Je zou een IndexOf kunnen doen om te kijken of er een . is ingevoerd. Dit heeft dan weer als nadeel dat als je een andere instelling hebt de boel omgekeerd werkt.
Je kan overigens opvragen wat het decimaalteken is via
C#:
1
string decimaalteken = System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;


PS: Of natuurlijk veel eenvoudiger... Je lengte in gehele centimeters verwachten :P dus niet 1.73m, maar 173cm.

[ Voor 8% gewijzigd door Verwijderd op 15-08-2007 15:38 ]


  • DrDelete
  • Registratie: Oktober 2000
  • Laatst online: 30-11 21:50
Verwijderd schreef op woensdag 15 augustus 2007 @ 15:17:
ja dat is ook een goede, weet iemand toevallig wat de code is om dit af te vangen (hiermee bedoel ik dus het verhaal van die punt en de komma)
het heeft met de regional settings te maken.
Even over je programma-logica: als een validatie faalt, dan gelijk springen naar een escape routine en de app stoppen en niet doorgaan(zoals dikke_muk aangaf)

Over validatie: je conversie is niet monkey-proof: als ik een tekst intik ipv cijfers dan gaat het al mis. Mijn tip: probeer de TryParse functie van de System types van .NET (zoals double.TryParse of decimal.TryParse) om te checken of je kunt omzetten naar de System type. Als dat lukt, heb je gelijk de waarde te pakken in een variable. Mocht de TryParse false opleveren dan een veilige escape en de app stoppen.

Na de TryParse kun je met de double of decimal de check uitvoeren op < 0.

Verwijderd

Topicstarter
Het klopt idd dat het niet monkeyproof is maar zoals ik al zei ik heb hier een boekje c# for dummies en ik ben net een aantal weken bezig hiermee, hiervoor heb ik nog nooit geprogrammeerd vandaar dat er het een en ander niet klopt.

TryParse heb ik nog nooit geprobeerd :S

  • whoami
  • Registratie: December 2000
  • Nu online
Dit is eigenlijk gewoon een beetje te basic.

Verder ben ik het niet eens over het be-eindigen van je applicatie als je validatie faalt. Gewoon de mogelijkheid geven aan de gebruiker om het opnieuw te proberen tot wanneer de invoer ok is.

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.