我想将字符串转换为double(非常基本的问题不是吗?)
string input = "45.00000";
double numberd = Double.Parse(input, CultureInfo.InvariantCulture);
=>我的代码有效,我很高兴。
但是我可能有以下
string input = "";
double numberd = Double.Parse(input, CultureInfo.InvariantCulture);
在这种情况下,我的代码不起作用,我收到异常错误;( 我想知道如何处理这种情况。理想情况下,当我得到这个时,我希望我的变量 numberd 等于null。
任何人都可以帮助我吗? THX
答案 0 :(得分:5)
Microsoft建议使用Tester-Doer模式,如下所示:
string input = "";
double numberd;
if( Double.TryParse(input, out numberd) )
{
// number parsed!
}
答案 1 :(得分:3)
使用Double
进行解析,但可能使用Double?
来存储值?
Double number;
string input = ""; // just for demo purpose, naturally ;o)
Double? nullableNumber =
Double.TryParse(input, NumberStyles.Any, CultureInfo.InvariantCulture, out number)
? (Double?)number
: null;
// use nullableNumber
答案 2 :(得分:1)
double
等原始类型不能为空。您可以拥有double?
的可空版本,但Double.Parse
不会返回double?
(只是普通double
)。
您可以使用Double.TryParse
并检查返回条件并将double?
设置为null,如果这更适合。
答案 3 :(得分:1)
为什么不抓住异常并设置变量?
double numberd;
try {
numberd = Double.Parse(input, CultureInfo.InvariantCulture);
} catch (System.FormatException e)
numberd = 0.0;
}
或者,您可以使用Double.TryParse
答案 4 :(得分:0)
添加if语句,将字符串或环绕声与try / catch块进行比较。
答案 5 :(得分:0)
假设你不担心除空字符串之外的其他无效值,这里有一个简单的单行:
Double? numberd = (input.Length == 0) ? null : (Double?)Double.Parse(input, CultureInfo.InvariantCulture);
mzabsky在正确的道路上,但他的解决方案不会构建,你不应该硬编码空字符串 - 最好检查字符串的长度。
答案 6 :(得分:0)
怎么样
Double? numberd = String.IsNullOrEmpty(str) ? null : Double.Parse(str)
在我的应用程序中,我正在解析CSV文件,我希望这些空字符串为零,所以我返回0.0而不是null,这一切都很好。
5 more