标签: tryparse

文化不变的Decimal.TryParse()

我正在为十进制验证器编写一个自定义字符串,需要使用忽略文化的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不是必需的类型.什么是正确的用法?

c# cultureinfo decimal tryparse

32
推荐指数
3
解决办法
5万
查看次数

从F#调用DateTime.TryParse的正确方法是什么?

从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

.net f# tryparse

28
推荐指数
4
解决办法
4368
查看次数

是否有一个Python等效于C#的DateTime.TryParse()?

DateTime.TryParse()在Python中是否有与C#相同的东西?

我指的是它避免抛出异常这一事实,而不是它猜测格式的事实.

python datetime parsing exception tryparse

23
推荐指数
5
解决办法
2万
查看次数

DateTime.TryParse世纪控件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)

c# datetime tryparse

20
推荐指数
2
解决办法
1万
查看次数

Decimal.TryParse不解析我的十进制值

当我尝试转换类似0.1的内容(来自文本框中的用户)时,我的值b始终为false.

bool b = Decimal.TryParse("0.1", out value);
Run Code Online (Sandbox Code Playgroud)

怎么可以在这里工作?

c# decimal tryparse

19
推荐指数
3
解决办法
2万
查看次数

使 TryParse 与逗号或点小数分隔符兼容

问题:让我们假设您正在使用一个点“。” 作为区域设置中的小数点分隔符,并用逗号对字符串进行编码。

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前提。

我会解决这个问题,如果有人有更多提示,欢迎

c# decimal tryparse regional-settings

18
推荐指数
2
解决办法
2万
查看次数

Int32.TryParse()或(int?)command.ExecuteScalar()

我有一个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)

.net c# ado.net tryparse executescalar

17
推荐指数
3
解决办法
4万
查看次数

int.TryParse()为"#.##"返回false

我有一个接收字符串参数并将它们转换为整数的函数.
为了安全转换,使用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# tryparse

15
推荐指数
4
解决办法
1万
查看次数

UInt32.TryParse()十六进制数不起作用

由于某种原因,以下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)

c# tryparse

14
推荐指数
2
解决办法
2万
查看次数

从double转换为int的最佳(最安全)方式

我很好奇将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)

c# explicit type-conversion tryparse

14
推荐指数
4
解决办法
1万
查看次数