从数据库转换数字数据

时间:2016-11-04 04:58:24

标签: vb.net

在我的系统中,默认的小数点分隔符是逗号 在数据库中,我将数值写为字符串,但格式为小数点分隔符 现在,当我使用以下代码从数据库中读取数据时,如“3.2”,我得到值32D!

NumericUpDown1.Value = CDec(reader("myfield"))

这里有什么办法可以在描述的情况下从显示的代码中获得3,2的十进制值吗?

4 个答案:

答案 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 = "," });

More info

答案 2 :(得分:0)

NumericUpDown1.Value = Convert.ToDouble(reader("myfield").ToString().Replace("," , "."))

是另一种方式,如果你不想转换为Double,那么你可以使用ToDecimal。

答案 3 :(得分:-1)

如果我是你,我不会使用CDec而是使用Val功能。 试试这段代码:

NumericUpDown1.Value = Val(reader("myfield").ToString().Replace("," , "."))