我正在从旧的 MFC GUI 迁移到 C#。
当我在将字符串转换为整数类型时遇到意外异常时,我正在构建一个基于表单的 GUI。我假设它的工作方式与将字符串转换为 double 相同。
string str = "1,000";
double dthou = Convert.ToDouble(str); // OK
int ithou = Convert.ToInt32(str); // raises an exception
转换为 double 给出正确的值:1000.0。 对于 int 转换,我能够得到一个解决方案:Convert.ToInt32() a string with Commas .
但我很好奇这背后是否有任何原因。 或者,我是否遗漏了什么?
我找到了一个类似但不完全重复的问题: Number parsing weirdness
[编辑] 了解文化问题后。
我受到了一种文化冲击,因为直到现在,在韩国, float 和整数都用“,”表示千位和“.”。小数点(至少在现实世界中,在韩国,我的意思是,我认为......)。 我想我将不得不接受 MS Visual Studio 的当前设置并继续。
[EDIT2] 在解决这个问题之后。
我认为更多的是对格式化字符串的处理不一致。 ToDouble 接受带有千位分隔符的字符串(在我的文化中,逗号),但 ToInt32 不接受。如果 ToDouble
是 float | allowThousands
,那为什么 ToInt32
不能是 integer | allowThousands
是我要问的。
最佳答案
对于双重转换,有两种可能:
- 在您的文化中,
,
是数字组分隔符。因此转换成功并返回值1000
。 - 或者,在您的文化中,
,
用作小数点分隔符。再次成功转换为 float ,但这次返回1
。
要转换为整数,"1,000"
根本就不是整数。根据您的命名,我怀疑 ,
是您的数字组分隔符。您期望 ToInt32()
以这种方式处理它。但是 ToInt32()
不接受数字组分隔符。 ToInt32()
的有效字符为 0
到 9
,-
或 + 的可选符号前缀
和前导或尾随空格。
关于c# - 将带逗号的字符串转换为 double 和 int 是不同的。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23242919/