C# how to parse a string to double
我想把字符串解析为double。我的问题是,newtime的结果是800,但是结果应该是8,00。
1 2
| string time ="08:00";
double newTime = double.Parse(time.Replace(':', '.')); |
- 8,00不是有效的double
- 当我执行你的代码时,我得到了8。
- 你想达到什么目的?从hh:mm格式计算小时数?
- 时代不会翻倍。你在这里问什么很不清楚…
- 但是我想用两个小数点得到8,00
- 我想你们的文化有小数点分隔符。因此,尝试像thi:double newtime=double.parse(time.replace(':',''),cultureInfo.invariangCulture)那样进行分析;
- 我认为问题在于样式输出。您应该使用这样的字符串格式
- 我已经尝试用cultureinfo.invarianculture进行解析,但它没有带来什么,结果仍然是8。
- @A.H是的,这是正确的,它不能是其他任何东西,因为你有双非字符串。您希望得到不带前导零的字符串,插入的是:?
- @A.H听所有这些人的话,而不是说错误的结果仍然是8。它是一个双8,0=8周期。你会写"做那5次吗"->"做那5次,0次"…不,你不需要。如果你不想格式化,你只需要一个字符串,Piotr Kamoda在他的评论中对此给出了完美的答案。
- 谢谢@piotr kamoda
- 如果是时间,为什么不直接解析成时间跨度对象呢?IE TimeSpan.Parse("08:00")。
- @A.H好的,现在我明白你想要什么了,所以这次最好这样做。替换(":",",").trimstart("0")。
如果要将:视为十进制分隔符,只需执行以下操作:
1 2 3 4 5
| string time ="08:00";
// when parsing"time", decimal separator is":"
double newTime = double.Parse(time,
new NumberFormatInfo () { NumberDecimalSeparator =":" }); |
尽量避免使用像time.Replace(':', '.')中的'.'这样的魔法常量。请注意,newTime将是8,而不是8.00(自8 == 8.0 == 8.00 == 8.000...)。如果要用小数点后两位数字表示newTime,请使用格式:
1 2 3
| // F2 - format string ensures 2 digits after the decimal point
// Outcome: 8.00
Console.Write(newTime.ToString("F2")); |
。
您的问题是,您的区域性与您在字符串中创建的内容具有不同的十进制分隔符。
你可以把它改成这个
1 2
| string time ="08:00";
double newTime = double.Parse(time.Replace(":", Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator) ); |
号
- 新时代仍然是8岁。但我要8点
- @A.H那么你需要一个字符串。如果有小数,双精度数只显示小数。
1 2
| string time ="08:00";
double newTime = double.Parse(time.Replace(':', '.'), CultureInfo.InvariantCulture); |
Double.Parse的结果是Double而不是字符串。您需要使用ToString从double输出一个字符串。
您还应该使用具有NumberStyles参数的Double.Parse重载。使用Float值允许指数记数法。