Tag: tostring

当货币值为0.00美元时,C#创建自定义NumberFormatInfo以显示“Free”

我需要在我的ASP.NET MVC应用程序中显示货币,但当货币为0时,我希望它显示“Free”(当然是本地化的!)而不是0.00美元。 所以,当我有这样的事情…… Decimal priceFree = 0.00; Decimal priceNotFree = 100.00; priceFree.ToString(“C”); priceNotFree.ToString(“C”); 输出为“$ 0.00”“$ 100.00” 我希望它是“免费”“100.00美元” 我想我可以使用.ToString(字符串格式,IFormatProvider formatProvider)方法来实现这一点,但我不知道如何去做。 显然,我希望尽可能多地重用NumberFormatInfo,并在输入为0时仅覆盖它。在这种情况下,我可以简单地返回包含“Free”字符串的本地化资源。 那我该怎么做? 谢谢

十进制ToString格式,至少给出1位数,没有上限

如何在decimal后至少有一位数字格式化C#中的小数,但如果指定小数点后多于1位,则不是固定的上限: 5 -> “5.0” 5.1 -> “5.1” 5.122 -> “5.122” 10.235544545 -> “10.235544545”

C#:应该如何实现ToString()?

问题是: GUI库喜欢使用ToString作为类的默认表示。 它需要本地化。 ToString用于记录。 它应该提供与编程相关的信息,不翻译并包括内部状态,如代理键和枚举值。 ToString被许多字符串操作使用,这些操作在写入流时将对象作为参数,例如String.Format 。 根据您认为不同的上下文。 如果同一对象有许多不同的表示, ToString太有限了,例如。 长短forms。 由于使用的不同,有许多不同的实现方式。 所以它们太不可靠而不是真正有用。 应该如何实现ToString才有用? 什么时候应该使用ToString ,什么时候应该避免? .NET Framework文档说: 此方法返回一个对文化敏感的人类可读字符串。 有一个类似的问题 ,但不一样。

没有汇编信息的generics类型的FullName?

我有一个数据库表,我存储窗口的高度,宽度,状态等。 作为窗口的标识符,我使用表单的完整类型名称。 它运作良好,但我发现一些通用的表单会获得非常长的名称。 原因是generics类型列出了完整的汇编信息。 有没有办法跳过它? 例如,常规表单的全名如下所示: Some.Name.Space.NameOfForm 但是通用表单的全名如下所示: Some.Name.Space.NameOfForm`1[[Some.Other.Name.Space.GenericType, AssemblyName, Version=1.0.2.0, Cuntulre=neutral, PublicKeyToken=null]] 为什么这么久? 有没有办法可以获得更短的版本? 例如: Some.Name.Space.NameOfForm`1[[Some.Other.Name.Space.GenericType]] 有什么线索吗?

c#double to character array或alternative

我有一个程序存储一堆结构实例,其中包含许多double类型的成员。 我经常将这些转储到一个文件,我正在使用字符串构建器,例如: StringBuilder builder = new StringBuilder(256); builder.AppendFormat(“{0};{1};{2};”, xAToString(), xBToString(), xCToString()); 其中’x’是我的类型的实例,A,B,C是double类型的X的成员。 我在每个上面调用ToString()以避免装箱。 但是,这些对ToString的调用仍然在我的应用程序的上下文中分配了大量内存,我想减少这一点。 我的想法是拥有一个字符数组,并将每个成员直接写入该数组,然后从该字符数组创建一个字符串并将其转储到该文件中。 几个问题: 1)我想做的事情听起来合理吗? 有没有人知道会有类似的东西? 2)是否已经内置了将double转换为字符数组(我想这将达到一些参数化精度?)。 理想情况下想要传入我的数组和一些索引并让它开始写入那里。 我试图这样做的原因是当我的应用程序运行时减少内存中的大量峰值,因为我运行了很多实例并经常发现自己受内存限制。 干杯A.

C#XMLElement.OuterXML在一行而不是格式

我正在尝试使用log4net从WCF服务记录一些XML响应。 我希望XML文件的输出到日志中的格式正确。 该请求作为XMLElement提供。 例: 请求如下: Information Application1 Timings 1000 2012-09-02T12:05:15.234Z Server1 10000000-0000-0000-0000-000000000000 Progam1 Entry User1 然后,如果我将此值输出到log4net。 logger.Info(request.OuterXml); 我将整个文档记录在一行中,如下所示: InformationApplication1Timings10002012-09-02T12:05:15.234ZServer110000000-0000-0000-0000-000000000000Progam1EntryUser1 我希望它在log.txt文件中显示格式正确,因为它进来。到目前为止,我发现这样做的唯一方法是将它转换为XElement,如下所示: XmlDocument logXML = new XmlDocument(); logXML.AppendChild(logXML.ImportNode(request, true)); XElement logMe = XElement.Parse(logXML.InnerXml); logger.Info(logMe.ToString()); 这对我来说似乎不是一个好的编程。 我一直在搜索文档,我无法找到一种内置的方法来正确输出它而不转换它。 是否有一种明显的,更好的方式让我失踪? edit1:删除了ToString(),因为OuterXML是一个String值。 edit2:我回答了我自己的问题: 所以我做了一些研究,我想我错过了文档中的一段代码。 http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.outerxml.aspx 我把它归结为: using (MemoryStream ms = new MemoryStream()) { XmlWriterSettings xws = new XmlWriterSettings(); xws.Indent = true; […]

根据货币代码将十进制格式化为货币

我有一个收费表,金额和货币代码(美元,日元,加元,欧元等),我正在寻找正确格式化货币的最简单方法。 使用我的本地文化代码(美国)并获取我的decimal.ToString(“c”)得到我$ 0.00输出,但我想要正确的货币符号和基于代码的小数位数。 是否存在任何库? 我当然可以为每个语句编写一个switch语句和自定义规则,但我认为这必须在之前完成。 更新: 我修改了Jon B的示例代码,如下所示 static IDictionary GetCurrencyFormatStrings() { var result = new Dictionary(); foreach (var ci in CultureInfo.GetCultures(CultureTypes.AllCultures)) { try { var ri = new RegionInfo(ci.Name); result[ri.ISOCurrencySymbol] = string.Format(“{0}#,#0.{1};({0}#,#0.{1})”, ri.CurrencySymbol, new string(‘0’, i.NumberFormat.CurrencyDecimalDigits)); } catch { } } return result; } 这允许我简单地去Amount.ToString(Currency [“JPY”]),格式将在我的本地上下文中输出逗号分隔符,但是自动输入正确的货币符号和小数位。 让我知道是否有人有更清洁的方式这样做,或者我很快就会将Jon的答案标记为正确。

空字符串上的ToString

为什么第二个产生exception而第一个产生exception呢? string s = null; MessageBox.Show(s); MessageBox.Show(s.ToString()); 更新 – 我能理解的例外,令人费解的一点(对我而言)是第一部分没有显示exception的原因。 这与Messagebox没有任何关系,如下图所示。 例如: string s = null, msg; msg = “Message is ” + s; //no error msg = “Message is ” + s.ToString(); //error 第一部分似乎是隐式地将null转换为空字符串。

C#ToString(“MM / dd / yy”)删除前导0

可能重复: 格式化.NET DateTime“日”,没有前导零 有没有办法删除日期格式中的前导零 例如, X.ToString(“MM/dd/yy”)返回07/02/11,但我希望它返回7/2/11。 这可能吗? 谢谢

用逗号(,)转换c#decimal toString()

c# decimal.toString()转换问题 示例:当我使用toString()将十进制转换为字符串时,我有一个十进制值(.1),它返回(0,10)。 而不是。(DOT)它返回,(COMMA)。