By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
434,882 Members | 2,453 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 434,882 IT Pros & Developers. It's quick & easy.

CInt produce System.ArgumentException: "currency separator information is ambiguous for parsing"

P: n/a
In my apllication I use the following code:

'-- My Code:
Public Shared Function strDate2Date(ByVal strDate As String) As
System.DateTime
Dim isOk As Boolean = False
If (strDate Is Nothing) Then
isOk = False
ElseIf Not (strDate.Length() = 6) Then
isOk = False
Else
isOk = True
Dim yyyy As Integer = CInt(strDate.Substring(0, 2)) + 2000
Dim mm As Integer = CInt(strDate.Substring(2, 2))
Dim dd As Integer = CInt(strDate.Substring(4, 2))
Return (New System.DateTime(yyyy, mm, dd))
End If
Return Nothing
End Function

dim myDateCreated1 As System.DateTime = strDate2Date("020801") ' 1
Aug 2002
dim myDateCreated2 As System.DateTime = strDate2Date("040404") ' 4
Apr 2004
dim myDateCreated3 As System.DateTime = strDate2Date("040420") ' 20
Apr 2004
dim myDateCreated4 As System.DateTime = strDate2Date("041104") ' 4
Nov 2004
'-- Code till here.

On of my Italian client got the exception:

'-- Exception:
System.ArgumentException: The currency separator information specified
in the NumberFormatInfo is ambiguous for parsing.
at Microsoft.VisualBasic.CompilerServices.DoubleType. Parse(String
Value, NumberFormatInfo NumberFormat)
at
Microsoft.VisualBasic.CompilerServices.IntegerType .FromString(String
Value)
at myassembly.strDate2Date(String strDate)
'-- Exception till here.

When googling I understood that the VB compiler compiles CInt into -
Microsoft.VisualBasic.CompilerServices.IntegerType ::FromString(string)

So the exception is coming from one of the following lines:
CInt("01")
CInt("02")
CInt("04")
CInt("08")
CInt("11")
CInt("20")

Any idea why do I get an exception?
Do I have to use [NumberFormatInfo and CultureInfo] whenever I parse
strings to numbers?

Thanks.

Atara.

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
Nov 21 '05 #1
Share this Question
Share on Google+
18 Replies


P: n/a
Altara,

For your purpose is already a method, can you try this

Dim myDateCreated1 As System.DateTime = DateTime.ParseExact("020801",
"yyMMdd", Nothing) ' 1 Aug(2002)
Dim myDateCreated2 As System.DateTime = DateTime.ParseExact("040404",
"yyMMdd", Nothing) ' 4 Apr(2004)
Dim myDateCreated3 As System.DateTime = DateTime.ParseExact("040420",
"yyMMdd", Nothing) ' 20 Apr(2004)
Dim myDateCreated4 As System.DateTime = DateTime.ParseExact("041104",
"yyMMdd", Nothing) ' 4 Nov(2004)

I hope this helps?

Cor
Nov 21 '05 #2

P: n/a

Thanks, i will try it.
but I am also concerned for other code-lines in my program that I use -
Dim myInt As Integer = CInt(myStr)

Why do I get this exception for the first place?
atara.

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
Nov 21 '05 #3

P: n/a
Atara,

I do not see this, maybe you can try this on that one computer.

Dim myDateCreated1 As System.DateTime = New System.DateTime(2002, 8, 1) ' 1
Aug(2002)
Dim myDateCreated2 As System.DateTime = New System.DateTime(2004, 4, 4) ' 4
Apr(2004)
Dim myDateCreated3 As System.DateTime = New System.DateTime(2004, 4, 20) '
20 Apr(2004)
Dim myDateCreated4 As System.DateTime = New System.DateTime(2004, 11, 4) '
4 Nov(2004)

Because that is the only datetime affected part in your sample.

Accoording to this it should in my opinion works on every computer

http://msdn.microsoft.com/library/de...ctortopic2.asp

I hope this helps?

Cor
"Atara" <At***@DD.com> schreef in bericht
news:OY**************@TK2MSFTNGP09.phx.gbl...

Thanks, i will try it.
but I am also concerned for other code-lines in my program that I use -
Dim myInt As Integer = CInt(myStr)

Why do I get this exception for the first place?
atara.

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!

Nov 21 '05 #4

P: n/a

Thanks for your efforts!

1. It is on a client computer, and I did not manage to reproduce the
same OS with the same languages on our computer. hopefully we will do it
within some hours.

2. The Exception occured at -
"Microsoft.VisualBasic.CompilerServices.IntegerTyp e.FromString(String
Value)"
and not on "System.DateTime.constructor"
Thanks. Atara.

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
Nov 21 '05 #5

P: n/a
Atara,
As Cor suggests I would use DateTime.ParseExact in the strDate2Date routine.

As to the specifics of the exception:

Are certain that the input string contains only digits & not some other
character?

That you are not inadvertently doing:
dim myDateCreated1 As System.DateTime = strDate2Date("..,,..")

Or other invalid character sequences...

You could always include the debug program database (the .pdb file) for this
user.

If you are compiling with release build you can use "Project - Properties -
Configuration Properties - Build - Generate debugging information" then
install the .pdb file in the same folder as the executable. When you include
the .pdb file, the Stack Trace on Exceptions will include file names & line
numbers, allowing you to identify specifically which line had the problem.

Alternatively you could include a Try/Catch within strDate2Date to give
context information.

Something like:
Public Shared Function strDate2Date(ByVal strDate As String) As
System.DateTime
Try
Dim isOk As Boolean = False
If (strDate Is Nothing) Then
isOk = False
ElseIf Not (strDate.Length() = 6) Then
isOk = False
Else
isOk = True
Dim yyyy As Integer = CInt(strDate.Substring(0, 2)) + 2000
Dim mm As Integer = CInt(strDate.Substring(2, 2))
Dim dd As Integer = CInt(strDate.Substring(4, 2))
Return (New System.DateTime(yyyy, mm, dd))
End If
Return Nothing
Catch ex As Exception
Throw New ArgumentException("Invalid date parameter '" & strDate
& "'", "strDate", ex)
End Try
End Function

This way you will see what the parameter value was, I would consider
creating a new exception class that derives from ArgumentException that
included both the parameter name & its value (ala
ArgumentOutOfRangeException) instead of using ArgumentException directly.

Hope this helps
Jay

"Atara" <At***@DD.com> wrote in message
news:O7**************@TK2MSFTNGP09.phx.gbl...
In my apllication I use the following code:

'-- My Code:
Public Shared Function strDate2Date(ByVal strDate As String) As
System.DateTime
Dim isOk As Boolean = False
If (strDate Is Nothing) Then
isOk = False
ElseIf Not (strDate.Length() = 6) Then
isOk = False
Else
isOk = True
Dim yyyy As Integer = CInt(strDate.Substring(0, 2)) + 2000
Dim mm As Integer = CInt(strDate.Substring(2, 2))
Dim dd As Integer = CInt(strDate.Substring(4, 2))
Return (New System.DateTime(yyyy, mm, dd))
End If
Return Nothing
End Function

dim myDateCreated1 As System.DateTime = strDate2Date("020801") ' 1
Aug 2002
dim myDateCreated2 As System.DateTime = strDate2Date("040404") ' 4
Apr 2004
dim myDateCreated3 As System.DateTime = strDate2Date("040420") ' 20
Apr 2004
dim myDateCreated4 As System.DateTime = strDate2Date("041104") ' 4
Nov 2004
'-- Code till here.

On of my Italian client got the exception:

'-- Exception:
System.ArgumentException: The currency separator information specified
in the NumberFormatInfo is ambiguous for parsing.
at Microsoft.VisualBasic.CompilerServices.DoubleType. Parse(String
Value, NumberFormatInfo NumberFormat)
at
Microsoft.VisualBasic.CompilerServices.IntegerType .FromString(String
Value)
at myassembly.strDate2Date(String strDate)
'-- Exception till here.

When googling I understood that the VB compiler compiles CInt into -
Microsoft.VisualBasic.CompilerServices.IntegerType ::FromString(string)

So the exception is coming from one of the following lines:
CInt("01")
CInt("02")
CInt("04")
CInt("08")
CInt("11")
CInt("20")

Any idea why do I get an exception?
Do I have to use [NumberFormatInfo and CultureInfo] whenever I parse
strings to numbers?

Thanks.

Atara.

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!

Nov 21 '05 #6

P: n/a

Thanks you all for your efforts!
Atara.

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
Nov 21 '05 #7

P: n/a

Thanks you all for your efforts!
Atara.

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
Nov 21 '05 #8

P: n/a
Altara

Do you know what the problem was on that one computer with strange effects?

I am currious about that and it is as well good for this message thread when
it is searched on Google.

Cor
Nov 21 '05 #9

P: n/a
Altara

Do you know what the problem was on that one computer with strange effects?

I am currious about that and it is as well good for this message thread when
it is searched on Google.

Cor
Nov 21 '05 #10

P: n/a

I do not know yet. When I will have more info I will update this thread.

Thanks Cor.

Atara.

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
Nov 21 '05 #11

P: n/a

I do not know yet. When I will have more info I will update this thread.

Thanks Cor.

Atara.

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
Nov 21 '05 #12

P: n/a

I have asked my client about his "Regional Options", he did not answer
what they were, he only said that "the problem sprang from the
"International options" but now all is OK"

Thank you all for your time.

Atara.

*** Sent via Developersdex http://www.developersdex.com ***
Don't just participate in USENET...get rewarded for it!
Nov 21 '05 #13

P: n/a
info from another Italian client with the same error:
...
System.ArgumentException: The currency separator information specified
in the NumberFormatInfo is ambiguous for parsing.
at Microsoft.VisualBasic.CompilerServices.DoubleType. Parse(String
Value, NumberFormatInfo NumberFormat)
at
Microsoft.VisualBasic.CompilerServices.IntegerType .FromString(String
Value)
at myXxx.cmcUtilities.strDate2Date(String strDate)
...

The client info:
I changed the decimal sign from dot to comma and now everithing works.

(I guess this is in -
'Control Panel' | 'Regional Options' | 'Currency'
(Atara))

The PC language is Italian as well as the operating system Windows XP.

I hope this will help others.

Atara.
*** Sent via Developersdex http://www.developersdex.com ***
Nov 21 '05 #14

P: n/a
related thread:
'Local Settings and NumberFormat issues'

<URL:http://www.developersdex.com/vb/message.asp?r=4173188&p=1121>

*** Sent via Developersdex http://www.developersdex.com ***
Nov 21 '05 #15

P: n/a
Atara <At***@DD.com> wrote in news:uR**************@TK2MSFTNGP10.phx.gbl:
'Local Settings and NumberFormat issues'

<URL:http://www.developersdex.com/vb/message.asp?r=4173188&p=1121>


Thats the same thread thats currently under way here now. :)
--
Chad Z. Hower (a.k.a. Kudzu) - http://www.hower.org/Kudzu/
"Programming is an art form that fights back"

Develop ASP.NET applications easier and in less time:
http://www.atozed.com/IntraWeb/
Nov 21 '05 #16

P: n/a
related article:
<url: http://www.codeproject.com/vb/net/IsNumeric.asp>
Is it really Numeric
By Alberto Venditti
(Italy...)

*** Sent via Developersdex http://www.developersdex.com ***
Nov 23 '05 #17

P: n/a


and another thread: (Dutch)
<url:http://www.experts-exchange.com/Prog...ng_Languages/D
ot_Net/Q_20837350.html >

problem happened to our clients in Italy, Spain and Portugal.

Atara

*** Sent via Developersdex http://www.developersdex.com ***
Oct 31 '06 #18

P: n/a


To summarize:

Bug:
With some "Regional Options", any call to CInt() produces exception:
System.ArgumentException: The currency separator information
specified in the NumberFormatInfo is ambiguous for parsing.
at Microsoft.VisualBasic.CompilerServices.DoubleType. Parse(String
Value, NumberFormatInfo NumberFormat)
at
Microsoft.VisualBasic.CompilerServices.IntegerType .FromString(String
Value)

In my case it was when 'ControlPanel|Regional Options' , 'Decimal
Symbol' is a comma sign (,) .
It should be a dot sign (.) to avoid the bug.

Cause:
If any of the NumberFormatInfo group separators ( NumberGroupSeparator
| CurrencyGroupSeparator | PercentGroupSeparator)
is the same as any of the decimal separators (
NumberDecimalSeparator | CurrencyDecimalSeparator |
PercentDecimalSeparator),
Then parsing ambiguous strings produces unpredictable results.
Even when I parse simple strings with no seperators at all e.g.:
Dim myInt As integer = CInt("123")

Fix:
I started by replacing all -
' myInt = CInt(myNoInt)
with -
myInt = Integer.Parse(myNoInt)

but since I cannot replace AND test all ~100 appearances of CInt() in
my project
I added in my Main() :
Dim myCI As New System.Globalization.CultureInfo("en-US", False)
myCI.NumberFormat.NumberGroupSeparator = ","
myCI.NumberFormat.NumberDecimalSeparator = "."
' Note: This values are already set by default, but I re-set them
' for future versions that might not act the same.
System.Threading.Thread.CurrentThread.CurrentCultu re = myCI

It seems that the problem was fixed.

Atara.
*** Sent via Developersdex http://www.developersdex.com ***
Dec 4 '06 #19

This discussion thread is closed

Replies have been disabled for this discussion.