我正在为十进制验证器编写一个自定义字符串,需要使用忽略文化的Decimal.TryParse(即不关心输入是否包含"."或","作为小数点分隔符).这是建议的方法:
public static bool TryParse(
string s,
NumberStyles style,
IFormatProvider provider,
out decimal result
)
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚要用什么作为第三个参数.我见过的例子如下:
culture = CultureInfo.CreateSpecificCulture("en-GB");
Decimal.TryParse(value, style, culture, out number)
Run Code Online (Sandbox Code Playgroud)
所以他们创造了一种特定的文化 CultureInfo没有"CreateInvariantCulture"方法,CultureInfo.InvariantCulture不是必需的类型.什么是正确的用法?
从F#调用DateTime.TryParse的正确方法是什么?我试图从F#interactive测试一些代码,我无法弄清楚如何通过ref将可变的DateTime传递给第二个参数.F#中的输入/输出/参考语法是什么?
这是我正在查看的方法签名:http: //msdn.microsoft.com/en-us/library/ch92fbc1.aspx?cs-save-lang = 1&cs-lang = fsharp#code-snippet-1
DateTime.TryParse()
在Python中是否有与C#相同的东西?
我指的是它避免抛出异常这一事实,而不是它猜测格式的事实.
以下代码段的结果是"12/06/1930 12:00:00".如何控制隐含的世纪,以便"12月30日"变为2030?
string dateString = "12 Jun 30"; //from user input
DateTime result;
DateTime.TryParse(dateString, new System.Globalization.CultureInfo("en-GB"),System.Globalization.DateTimeStyles.None,out result);
Console.WriteLine(result.ToString());
Run Code Online (Sandbox Code Playgroud)
请暂时搁置这样一个事实,即正确的解决方案是首先正确指定日期.
注意:结果与运行代码的pc的系统日期时间无关.
答:谢谢Deeksy
for (int i = 0; i <= 9; i++)
{
string dateString = "12 Jun " + ((int)i * 10).ToString();
Console.WriteLine("Parsing " + dateString);
DateTime result;
System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-GB");
cultureInfo.Calendar.TwoDigitYearMax = 2099;
DateTime.TryParse(dateString, cultureInfo , System.Globalization.DateTimeStyles.None, out result);
Console.WriteLine(result.ToString());
}
Run Code Online (Sandbox Code Playgroud) 当我尝试转换类似0.1的内容(来自文本框中的用户)时,我的值b始终为false.
bool b = Decimal.TryParse("0.1", out value);
Run Code Online (Sandbox Code Playgroud)
怎么可以在这里工作?
问题:让我们假设您正在使用一个点“。” 作为区域设置中的小数点分隔符,并用逗号对字符串进行编码。
string str = "2,5";
当你decimal.TryParse(str, out somevariable);
它时会发生什么?
somevariable
将假设为 0。
你能做些什么来解决它?
1-你可以
decimal.TryParse(str, NumberStyles.Any, CultureInfo.InvariantCulture, out somevariable);
Run Code Online (Sandbox Code Playgroud)
它会返回 25,而不是 2.5,这是错误的。
2-你可以
decimal.TryParse(str.Replace(",","."), out num);
Run Code Online (Sandbox Code Playgroud)
它会返回正确的值,但是,如果用户","
用作小数点分隔符,它将不起作用。
我无法使其工作的可能解决方案:
在区域设置中获取用户小数点分隔符:
char sepdec = Convert.ToChar(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);
Run Code Online (Sandbox Code Playgroud)
并以某种方式替换 from ",",sepdec
,这样如果它是逗号,它将保留一个逗号,如果用户使用点,则用实际的点替换。
提示?
编辑:很多网友发帖有用的信息,最近,使用参数NumberStyles.Any, CultureInfo.GetCultureInfo("pt-PT")
上tryParse
是行不通的,如果你的分隔符设置为“”所以它几乎犯规作出的TryParse‘通用’的fullfill前提。
我会解决这个问题,如果有人有更多提示,欢迎
我有一个SQL查询,它只返回一个字段 - 一个INT类型的ID.
我必须在C#代码中将其用作整数.
哪种方式更快,占用内存更少?
int id;
if(Int32.TryParse(command.ExecuteScalar().ToString(), out id))
{
// use id
}
Run Code Online (Sandbox Code Playgroud)
要么
int? id = (int?)command.ExecuteScalar();
if(id.HasValue)
{
// use id.Value
}
Run Code Online (Sandbox Code Playgroud)
要么
int? id = command.ExecuteScalar() as int?;
if(id.HasValue)
{
// use id.Value
}
Run Code Online (Sandbox Code Playgroud) 我有一个接收字符串参数并将它们转换为整数的函数.
为了安全转换,使用int.TryParse().
public IEnumerable<object> ReportView(string param1, string param2)
{
int storeId = int.TryParse(param1, out storeId) ? storeId : 0;
int titleId = int.TryParse(param2, out titleId) ? titleId : 0;
IEnumerable<object> detailView = new Report().GetData(storeId, titleId);
return detailView;
}
Run Code Online (Sandbox Code Playgroud)
函数调用ReportView("2","4") - > int.Tryparse成功解析数字
函数调用ReportView("2.00","4.00") - > int.TryParse无法解析数字
为什么?任何的想法?
@Update
对不起,伙计们,我的观念错了.我是c#的新手,我以为Int.TryParse()将返回整数部分并忽略小数.但它不会,甚至Convert.ToInt32("字符串")
感谢所有.
由于某种原因,以下C#控制台程序始终输出:
32
假
wtf = 0
我究竟做错了什么?
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Convert.ToUInt32("0x20", 16));
UInt32 wtf = 0;
Console.WriteLine(UInt32.TryParse("0x20",
NumberStyles.HexNumber, // I've tried also AllowHexSpecifier
CultureInfo.InvariantCulture, // I've also tried CurrentCulture
out wtf));
Console.WriteLine("wtf={0}", wtf);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我很好奇将double转换为int的最佳方法.运行时安全是我的主要关注点(它不一定是最快的方法,但这将是我的次要问题).我已经留下了一些我可以在下面提出的选项.任何人都可以权衡哪种是最佳做法?有没有更好的方法来实现这个我没有列出?
double foo = 1;
int bar;
// Option 1
bool parsed = Int32.TryParse(foo.ToString(), out bar);
if (parsed)
{
//...
}
// Option 2
bar = Convert.ToInt32(foo);
// Option 3
if (foo < Int32.MaxValue && foo > Int32.MinValue) { bar = (Int32)foo; }
Run Code Online (Sandbox Code Playgroud)