Que fait CDbl?
J'ai eu jusqu'à récemment été sous l'impression que les CDbl(x)
opération dans VB.NET était essentiellement un cast (c'est à dire, le VB équivalent de (double)x
en C#); mais une découverte récente a révélé que ce n'est pas le cas.
Si j'ai cette chaîne:
Dim s As String = "12345.12345-"
Et je fais ceci:
Dim d As Double = CDbl(s)
d
sera réglé à la valeur -12345.12345
! Maintenant, ne vous méprenez pas, c'est le genre de pratique dans mon scénario particulier; mais je dois admettre que je suis confus quant à pourquoi cela fonctionne. En particulier, je suis confus parce que:
Double.Parse
ne fonctionne pas avec le au-dessus de l'entrée.Double.TryParse
ne fonctionne pas.Convert.ToDouble
ne fonctionne pas.
Comment est CDbl
si intelligent?
source d'informationauteur Dan Tao | 2010-04-16
Vous devez vous connecter pour publier un commentaire.
Il utilise Microsoft.VisualBasic.CompilerServices.Les Conversions.ToDouble(). Cette fonction contient une instruction Select sur l'objet GetTypeCode() valeur renvoyée afin qu'il puisse utiliser un convertisseur personnalisé en fonction du type de l'argument. La chaîne convertisseur considère la possibilité que la chaîne peut contenir une valeur de la monnaie et fait un peu de traitement sur la chaîne à traiter. Un permis de format pour les valeurs monétaires est une fuite en signe négatif.
Ce n'est pas particulièrement bon marché. Le moyen le plus rapide pour atteindre la même conversion est la suivante:
Qui a toujours été le comportement de
CDbl()
dans Visual Basic 4/5/6 et spécifiques à VB.NET (c'est inline, ne fait pas partie du cadre), de sorte qu'il est probablement juste été conservés pour les personnes se déplaçant à partir de versions antérieures.(Un peu comme quelque chose d'étrange dans pre-.NET Visual Basic en raison des caractéristiques acheté plus de QBasic.)
Si vous allez dans les Options Régionales du Panneau de configuration, il y a un paramètre qui vous permet de mettre le signe moins une fois, au lieu d'avant, des chiffres.
Je ne suis pas sûr de ce système utilise un signe moins après des chiffres, mais il semble CDbl est programmé pour accepter à la fois. Être libéral dans ce que vous acceptez, et tout ça.
Options régionales a également un cadre pour les nombres négatifs, où ils sont entre parenthèses. Cela fonctionne? --
CDbl("(12345.12345)")