当 conversionType 为十进制且输入为“40.00”时如何使用 Convert.ChangeType()

发布于 2024-12-08 23:45:09 字数 216 浏览 1 评论 0 原文

我的意思是,我想转换它:

string a = "40.00";
Convert.ChangeType(a, typeof(decimal))

结果是十进制值“4000”,

问题是转换调用是在 xmlToObject 转换器中的一个非常抽象的通用方法中进行的。我不想以编程方式添加很多不同的异常来正确转换。

问候克里斯

I mean, I want to convert this:

string a = "40.00";
Convert.ChangeType(a, typeof(decimal))

the result is a decimal value of "4000"

the problem is that the convert call is in a very abstract generic method in a xmlToObject Converter. I don't want to add programmatically lot's of different exceptions to convert correctly.

regards Chris

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

方觉久 2024-12-15 23:45:09

在您当前的文化中,小数点可能不由句点字符表示。

通常,在执行区域性不变转换时,最好指定 CultureInfo.InvariantCulture< /a> 作为 IFormatProvider 参数href="http://msdn.microsoft.com/en-us/library/ms130977.aspx">方法

(decimal) Convert.ChangeType(a, typeof(decimal), CultureInfo.InvariantCulture);

The decimal point might not be represented by the period character in your current culture.

In general, when performing culture-invariant conversions, it's best to specify CultureInfo.InvariantCulture as the IFormatProvider argument to the method:

(decimal) Convert.ChangeType(a, typeof(decimal), CultureInfo.InvariantCulture);
罪#恶を代价 2024-12-15 23:45:09

该转换很可能是使用使用句点作为千位分隔符而不是小数点分隔符的区域性来完成的。

转换值时指定区域性:

Convert.ToDecimal(a, CultureInfo.InvariantCulture)

The conversion is most likely done using a culture that uses the period as thousands separator instead of decimal separator.

Specify the culture when you convert the value:

Convert.ToDecimal(a, CultureInfo.InvariantCulture)
弃爱 2024-12-15 23:45:09

以下代码

 string s = "40.00";
 decimal d = (decimal)Convert.ChangeType(s, typeof(decimal));

使 d = 40。这对我来说看起来不错。你的问题到底是什么?

编辑:
您似乎对所使用的文化有疑问。
执行以下操作进行转换:

string s = "40.00";
decimal d = (decimal)Convert.ChangeType(s, typeof(decimal), CultureInfo.InvariantCulture);

The following code

 string s = "40.00";
 decimal d = (decimal)Convert.ChangeType(s, typeof(decimal));

makes d = 40. This looks fine for me. What is your issue exactly?

Edit:
It seems you might have an issue with the culture used.
Do this for conversion:

string s = "40.00";
decimal d = (decimal)Convert.ChangeType(s, typeof(decimal), CultureInfo.InvariantCulture);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文