在我的系统中,默认的小数点分隔符是逗号 在数据库中,我将数值写为字符串,但格式为小数点分隔符 现在,当我使用以下代码从数据库中读取数据时,如“3.2”,我得到值32D!
NumericUpDown1.Value = CDec(reader("myfield"))
这里有什么办法可以在描述的情况下从显示的代码中获得3,2的十进制值吗?
答案 0 :(得分:1)
您知道您的号码以“1,23456”格式存储为字符串。您正在处理全球化问题,因此,您可以使用适当的区域性格式设置转换字符串。
NumericUpDown.Value
的类型为Decimal
,因此我使用函数Convert.ToDecimal
。
对于这个例子,我假设插入的号码由克罗地亚人存储在数据库中,所以我使用“hr-HR”作为文化名称。
Dim myFieldCroatia As String = "1,2345678901234567890123456789"
NumericUpDown1.Value = Convert.ToDecimal(myFieldCroatia, New Globalization.CultureInfo("hr-HR"))
如果它是由美国人存储的,我会使用“en-US”
Dim myFieldUnitedStates As String = "1.2345678901234567890123456789"
NumericUpDown2.Value = Convert.ToDecimal(myFieldUnitedStates, New Globalization.CultureInfo("en-US"))
顺便说一句,如果你先转换为Double,并隐式转换为Decimal,那么你将失去15到17位小数之后的任何精度。不确定是否需要,但值得注意。
有关文化名称的完整列表,请参阅MSDN
答案 1 :(得分:0)
试试这个。
NumericUpDown1.Value = CDec(reader("myfield"), new NumberFormatInfo() { NumberDecimalSeparator = "," });
答案 2 :(得分:0)
NumericUpDown1.Value = Convert.ToDouble(reader("myfield").ToString().Replace("," , "."))
是另一种方式,如果你不想转换为Double,那么你可以使用ToDecimal。
答案 3 :(得分:-1)
如果我是你,我不会使用CDec
而是使用Val
功能。
试试这段代码:
NumericUpDown1.Value = Val(reader("myfield").ToString().Replace("," , "."))