Lumia 800 > 820 > 950 | Surface Pro 3 | Windows 10 Mobile Insider
Ik krijg 340.0 terug, maar mijn laptop staat compleet op US ingesteld.
Waarom wil je . ipv , ?
Ik ga even naar de winkel en dan zoek ik verder.
Going for adventure, lots of sun and a convertible! | GMT-8
degene voor wie het programma is wil et zo hebben
Lumia 800 > 820 > 950 | Surface Pro 3 | Windows 10 Mobile Insider
1
2
| System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator = ","; System.Globalization.NumberFormatInfo.CurrentInfo.NumberGroupSeparator = "."; |
Als je hier eens mee speelt?
Going for adventure, lots of sun and a convertible! | GMT-8
nope maar : krijg er gelijk een exception op: {"Instance is read-only."}Snake schreef op vrijdag 01 mei 2009 @ 06:06:
C#:
1 2 System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator = ","; System.Globalization.NumberFormatInfo.CurrentInfo.NumberGroupSeparator = ".";
Als je hier eens mee speelt?
Lumia 800 > 820 > 950 | Surface Pro 3 | Windows 10 Mobile Insider
1
| Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); |
of
1
2
| CultureInfo ci = new CultureInfo("en-US"); String sValue = Decimal.Parse(130.4).ToString(ci); |
Even een compleet voorbeeldje:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| using System.Globalization; public class Test { public static void Main() { //Hiermee geef je aan welke input gebruikt wordt. System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); //Geef aan in welke culture het wilt hebben CultureInfo ci = new CultureInfo("en-US"); //Geef de waarde op hoe de user deze ingeeft. En zet deze om naar de gewenste culture. string sValue = decimal.Parse("130.4").ToString(ci); System.Console.WriteLine(sValue); //OF //Hiermee geef je aan welke input gebruikt wordt. System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); //Geef de waarde op hoe de user deze ingeeft. sValue = decimal.Parse("130.4").ToString(); System.Console.WriteLine(sValue); } } |
[ Voor 56% gewijzigd door Spiral op 01-05-2009 09:13 . Reden: nl-NL naar en-US en een compleet voorbeeld ]
To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles
Decimaal teken en cijfergroeperingssymbool
[ Voor 40% gewijzigd door RobIII op 01-05-2009 11:26 ]
There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.
Je eigen tweaker.me redirect
Over mij
Of anders gebruik je de cultureinfo zoals die bedoeld is, en geef je de cultureinfo mee aan de parse / format methoden?Invisible_man schreef op vrijdag 01 mei 2009 @ 07:16:
Doe je het anders, bekijk je eerst met System.Globalization.NumberFormatInfo.CurrentInfo.NumberDecimalSeparator wat de separator is. Is het een punt ga je verder met parsen, is het een komma vervang je alle punten door komma's en alle komma's door punten (in het geval er ook duizendtal-tekens in kunnen staan) en ga je dan pas parsen.
https://niels.nu
Ik krijg of : 340,4 als output of 3404 of 340 maar geen 340.4
Mijn landinstellingen staan op : "Standards and formats" = Dutch, "location" = Netherlands en toestenbord instellingen staan op English->US
en bij Regional settings van standards and formats staat idd decimal symbol op ,
Maar ik wil niet dat het programma op een andere bak dan anders gedraagt als op mn dev bak, dus het moet in het programma worden ingebakken dat de output goed is. btw dit moet geen string zijn als output maar echt een decimal ( er moet nog mee gerekent worden )
hmm, had nog een ding geprobeerd :
Dat werkt nu wel, maar lijkt me raar dat wanneer ik de cultureinfo aan de parse method meegeef hij het niet paktSystem.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo( "en-US" );
Console.WriteLine( "Size: " + decimal.Parse( s ) );

[ Voor 20% gewijzigd door Sc0tTy op 01-05-2009 15:11 ]
Lumia 800 > 820 > 950 | Surface Pro 3 | Windows 10 Mobile Insider
Je moet de input parsen zoals de instellingen van de gebruiker staan. Je doet vervolgens waarschijnlijk een output via de Console.WriteLine, of een toekenning aan een form-field. In beide gevallen zal door .Net de decimal worden omgezet naar een string (middels de standaard ToString() methode). Deze ToString gebruikt de standaard Culture settings, in jouw geval de nederlandse. Works as designed dus.
Laat voor de vorm eens wat relevante code zien, zodat wij beter begrijpen waar je mee bezig bent.
Het uitput parsen naar de cmdline is alleen om te testen als ik met een break point ff kijk, is nu de waarde van de variabele nu ook 340.4 en dat is de bedoeling, het moet zo in het database komen
Lumia 800 > 820 > 950 | Surface Pro 3 | Windows 10 Mobile Insider
Stel je de query volledig als string samen, dan heb je natuurlijk wel te maken met de regionale instellingen van zowel je clients (ik ga uit van een winform app) als je databaseserver.
mysql bak, hangt ook nog een website aan. in het database schrijft hij et wel goed weg,bigbeng schreef op vrijdag 01 mei 2009 @ 16:27:
Als jouw database de waarde ook opslaat als decimal, dan zou je geen problemen hoeven te verwachten mits je bij het uitvoeren van inserts en updates gebruik maakt van een stored procedure of een parameterized query.
Stel je de query volledig als string samen, dan heb je natuurlijk wel te maken met de regionale instellingen van zowel je clients (ik ga uit van een winform app) als je databaseserver.
ik gebruik nu telkens voordat ik een parse doe die System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo( "en-US" );
beetje raar dat hij et niet mee pakt als je em meegeeft in de parse method, maar goed het werkt, en wil eigenlijk verder
Lumia 800 > 820 > 950 | Surface Pro 3 | Windows 10 Mobile Insider
Het megeven van de culture info bij de parse is ALLEEN van belang voor de INPUT. Daarna is het een object van het type float. Daarin zit helemaal geen komma of punt of wat dan ook. Pas wanneer je het weer af gaat drukken (bijvoorbeeld met Console.WriteLine) wordt de toString (oid) van de float aangeroepen en hier wordt vervolgens weer naar de culture info gekeken.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
Volgens mij ga je dan de boot in als je een file parsed die op een systeem met andere instellingen is gegenereerd?bigbeng schreef op vrijdag 01 mei 2009 @ 15:15:
Je moet de input parsen zoals de instellingen van de gebruiker staan.
Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.
Dit moet echt werken hoor:Sc0tTy schreef op vrijdag 01 mei 2009 @ 15:07:
Ik heb dat nu allemaal geprobeerd, maar geen success.
Ik krijg of : 340,4 als output of 3404 of 340 maar geen 340.4
Mijn landinstellingen staan op : "Standards and formats" = Dutch, "location" = Netherlands en toestenbord instellingen staan op English->US
en bij Regional settings van standards and formats staat idd decimal symbol op ,
Maar ik wil niet dat het programma op een andere bak dan anders gedraagt als op mn dev bak, dus het moet in het programma worden ingebakken dat de output goed is. btw dit moet geen string zijn als output maar echt een decimal ( er moet nog mee gerekent worden )
hmm, had nog een ding geprobeerd :
[...]
Dat werkt nu wel, maar lijkt me raar dat wanneer ik de cultureinfo aan de parse method meegeef hij het niet pakt
1
2
3
4
5
| System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US"); System.Threading.Thread.CurrentThread.CurrentCulture = ci; string decimalString = Decimal.Parse("340.4").ToString(); Console.WriteLine(decimalString); //Outputs 340.4 according to CultureInfo. |
Ik gebruik dit zelf ook en het werkt perfect op zowel Windows NL als Windows UK (En dus ook andere talen).
'You like a gay cowboy and you look like a gay terrorist.' - James May
Ik doe dat nu ook en werkt ookPhyxion schreef op zaterdag 02 mei 2009 @ 08:31:
[...]
Dit moet echt werken hoor:
C#:
1 2 3 4 5 System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("en-US"); System.Threading.Thread.CurrentThread.CurrentCulture = ci; string decimalString = Decimal.Parse("340.4").ToString(); Console.WriteLine(decimalString); //Outputs 340.4 according to CultureInfo.
Ik gebruik dit zelf ook en het werkt perfect op zowel Windows NL als Windows UK (En dus ook andere talen).
Lumia 800 > 820 > 950 | Surface Pro 3 | Windows 10 Mobile Insider
Je moet er gewoon voor zorgen dat getallen die je weggeschreven hebt naar een file, database, xml, etc. weggeschreven zijn met een consistente culture. Aangezien files etc. over het algemeen portable moeten zijn is het het beste om deze culture-invariant op te slaan en terug te lezen. Maw:Sc0tTy schreef op zaterdag 02 mei 2009 @ 14:54:
[...]
Ik doe dat nu ook en werkt ookJammer genoeg als jeje thread dus opnieuw start moet je het opnieuw doen ( oftewel kan in mn main niet zetten dat dat moet gebeuren, maar op elke plaats waar ik het wil ), geen probleem, alleen hoe minder werk hoe beter ^^
1
2
3
4
5
6
7
8
9
10
| decimal myDecimal = 304.4; // Culture-invariant representatie maken voor opslag. string myStoredString = myDecimal.ToString(CultureInfo.InvariantCulture); // Culture-invariant representatie terug in lezen myDecimal = decimal.Parse(myStoredString, CultureInfo.InvariantCulture); // String maken voor weergave in de applicatie, mbv ingestelde culture v/d gebruiker string myDisplayedString = myDecimal.ToString(); |
Als dit niet werkt is er iets heel erg mis met je applicatie.
En zoals eerder al gezegd: een waarde naar de console dumpen is hier niet de correcte manier om te kijken of je een decimal correct geparsed hebt. Deze zal nl. al een ToString() met de standaard culture v/d thread aanroepen wat je beeld van de daadwerkelijke waarde kan gaan vertekenen. Wil je de interne waarde van de decimal controleren, dan zet je een breakpoint en inspecteer je de waarde met je debugger.
Wel lezen heaSc0tTy schreef op vrijdag 01 mei 2009 @ 15:29:
Het uitput parsen naar de cmdline is alleen om te testen als ik met een break point ff kijk, is nu de waarde van de variabele nu ook 340.4 en dat is de bedoeling, het moet zo in het database komen
Lumia 800 > 820 > 950 | Surface Pro 3 | Windows 10 Mobile Insider
Topics gaan alleen op slot wanneer ze niet aan de policies voldoen.Sc0tTy schreef op zaterdag 02 mei 2009 @ 20:09:
[...]
Wel lezen heaMaar van mij mag het topic op slot
Verder geeft het stukje wat je quote alleen maar aan dat je het niet begrepen hebt. Een float heeft helemaal geen komma of punt.
Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'
1
| System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture; |