【问题标题】:convert to decimal - input string was not correct format [duplicate]转换为十进制 - 输入字符串的格式不正确[重复]
【发布时间】:2016-04-27 15:24:12
【问题描述】:

我有一个字符串"-6.379885574693132E-10",我无法转换为十进制......它很大吗?是否有可能解决这个问题?

错误:

输入的字符串格式不正确

public class Program {
    private static void Main(string[] args) {
        Foo foo = new Foo();
        var str = "-6.379885574693132E-10";
        foo.SetPropertyValue("myVal", str);
    }
}

public class Foo {

    public decimal myVal { get; set; }

    public void SetPropertyValue(string propertyName, object value) {
        var propertyInfo = GetType().GetProperty(propertyName);
        propertyInfo.SetValue(this,
            Convert.ChangeType(value, propertyInfo.PropertyType, CultureInfo.InvariantCulture), null);
    }
}

【问题讨论】:

  • 你试过decimal.Parse吗?
  • 为什么需要反思?
  • @TimSchmelter 这只是一个小例子,在我的情况下需要它。
  • @emptyman 注意Convert.ChangeType("-6.379885574693132E-10", TypeCode.Object).GetType().FullName; 返回System.String。您正在尝试将 string 分配给 decimal
  • Convert.ChangeType 的工作是将一种类型转换为另一种类型,而不是解析文本。将文本转换为数字类型时,它将使用当前区域性的数字格式。要解析类型,请使用该类型的 Parse 方法(如果可用)。在这种情况下,请使用decimal.Parse

标签: c#


【解决方案1】:

我对反射一无所知,但您可以使用 AllowDecimalPoint, AllowExponent and AllowLeadingSign styles 与将 . 作为 NumberDecimalSeparatorInvariantCulture 作为文化的组合来解析此字符串;

var s = "-6.379885574693132E-10";
var d = decimal.Parse(s, NumberStyles.AllowDecimalPoint | 
                         NumberStyles.AllowExponent | 
                         NumberStyles.AllowLeadingSign, 
                         CultureInfo.InvariantCulture);

或者更简单,您可以使用包含所有这些样式的NumberStyles.Float

var s = "-6.379885574693132E-10";
var d = decimal.Parse(s, NumberStyles.Float, CultureInfo.InvariantCulture);

【讨论】:

  • Soner,有没有办法避免谷歌总是以您自己的语言(“tr-tr”)而不是英语(“en-us”)显示 MSDN 链接?即使我搜索 f.e.对于NumberStyles enumeration(英语),我正在获取德语链接。这很烦人,因为我总是必须将“de-de”更改为“en-us”。你有同样的问题吗?
  • @TimSchmelter 也许是因为您的网络浏览器发送的请求在其 HTTP 标头中更喜欢“德语(德国)”而不是“英语(美国)”?一些网站希望以用户喜欢的语言回答。也许您可以更改网络浏览器中的一些设置?
  • @TimSchmelter 嗯,老实说,我从来没有得到土耳其语链接。顺便说一下你在谷歌搜索或者MSDN搜索?例如,我的CurrentCulture 设置是我的本地计算机是tr-TR,我没有使用我的真实帐户登录到 MSDN,当我在 Google 和 MSDN 搜索中搜索时,我总是得到英文链接。我也使用英文浏览器,也许这会导致它。例如 Mozilla 有:Settings-->Content-->Languages 部分,您可以在其中设置首选语言选项。我不确定这个主题。顺便说一句,我知道那种感觉,很烦人。
  • @TimSchmelter 我的网络浏览器在此处(IE 11)似乎发送"ACCEPT": text/html, application/xhtml+xml, */*"ACCEPT-LANGUAGE": da-DK 等。那是“丹麦语(丹麦)”。但是,许多网站不提供丹麦语版本,然后它们又回到了英语版本。
  • @JeppeStigNielsen & Soner:谢谢你们俩。我认为我无法避免它,而且它不是浏览器设置(我使用的是 chrome)。我认为这与谷歌有关。我总是得到本地化的结果(由我的 IP 决定),包括德语 MSDN 链接。你不能轻易关闭它。如果我在www.google.co.uk 搜索,我会看到英文链接。也许我会尝试使用 firefox/chrome 扩展 GoogleGlobal
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 1970-01-01
  • 2019-09-26
  • 2014-11-09
  • 1970-01-01
  • 2020-10-15
相关资源
最近更新 更多