c# - 将带逗号的字符串转换为 double 和 int 是不同的。为什么?

标签 c# string int double

我正在从旧的 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 不接受。如果 ToDoublefloat | allowThousands,那为什么 ToInt32 不能是 integer | allowThousands 是我要问的。

最佳答案

对于双重转换,有两种可能:

  1. 在您的文化中,, 是数字组分隔符。因此转换成功并返回值 1000
  2. 或者,在您的文化中,, 用作小数点分隔符。再次成功转换为 float ,但这次返回 1

要转换为整数,"1,000" 根本就不是整数。根据您的命名,我怀疑 , 是您的数字组分隔符。您期望 ToInt32() 以这种方式处理它。但是 ToInt32() 不接受数字组分隔符。 ToInt32() 的有效字符为 09-+ 的可选符号前缀 和前导或尾随空格。

关于c# - 将带逗号的字符串转换为 double 和 int 是不同的。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23242919/

相关文章:

c# - 如何使用反射来确定数组的嵌套类型(元素类型)?

c# - 速度优化 Windows 窗体应用程序

C++ - 删除 std::string*;堆损坏

java - 使用 null int 的 Gson 反序列化似乎无法正常工作

python - 在 python 中模拟一个 int

c# - 使用 SqlDataAdapter 计算行数

c# - 如何创建 CSV 以便数字在电子表格中显示为字符串?

c - 指针和cstring初学者的烦恼

C++解析字符串以查找出现

java - 在 Java 中实现随机 Int