问题标签 [iformatprovider]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 将字符串转换为双精度,显式使用句点作为小数点
我的软件功能之一是将数字字符串转换为double
数据类型。我想明确指出使用句点 (.) 作为小数点。因此,无论用户系统的语言设置如何,它都会正确读取以句点分隔的十进制。我相信解决方案是IFormatProvider
在函数中使用参数Convert.ToDouble()
。我不确定如何做到这一点。
示例:字符串:“3.14” 双精度:3.14
c# - 文件路径的日期时间格式提供程序
我有一个从 DateTime 戳创建的文件路径:
现在我正在尝试将我的文件路径转换回 DateTime 对象。
使用 Regex 我可以轻松删除"C:\\Logs\\Tests\"
,但现在我假设我需要提供IFormtProvider的实现以转换2015\\Mar\\24\\13_32_09\
为DateTime对象,但我没有找到任何类似的示例来说明通常如何完成。
任何示例,可能不是我回答的特定解决方案,都会有所帮助。
谢谢
nlog - 如何将 formatProvider 参数添加到 NLog.LogEventInfo.Create 方法?
我有以下 NLog 2.0 代码来记录异常:
升级到 NLog 4.1 后,我看到以下警告:
函数 Create(logLevel As LogLevel, loggerName As String, message As String, exception As Exception) As LogEventInfo' 已过时:'使用 Create(LogLevel logLevel, string loggerName, Exception exception, IFormatProvider formatProvider , string message)'
...它要求我添加IFormatProvider formatProvider作为参数。我应该在那里添加什么?
c# - DataGridView 自定义格式:解析编辑值
假设我有一个绑定到 BindingSource 的 DataGridView。BindingSource 有一个 MyClass 类的 DataSource
DataGridView 将百分比显示为双精度数。所以 19% 的值显示为 0.19,这不是我想要的。
幸运的是,我可以更改列的单元格样式:
这使得该值根据当前区域性显示为百分比。在我的文化中,0.19 显示为 19%。
到目前为止,一切都很好。但是,如果操作员将此值更改为 18% 并结束编辑单元格,会发生什么情况。
- 引发事件 CellValidating。在这种情况下,我可以检查输入的文本是否为完美百分比。
然而,紧接着我得到一个异常,字符串“18%”不能被格式化为双精度。
我想我必须告诉 datagridviewCellStyle 使用哪个 formatprivider:
问题假设我有以下课程:
我的格式提供者应该如何调用这个函数?
c# - C#中的自定义字符串格式化程序
C#中的字符串格式化;
我可以使用它吗?是的。
我可以实现自定义格式吗?不。
我需要写一些东西,我可以将一组自定义格式选项传递给string.Format
,这将对特定项目产生一些影响。
目前我有这样的事情:
但我希望能够对那个项目做一些事情:
我知道我可以做类似的事情.ToUpper()
,.ToLower()
等等,但我需要用字符串格式来做。
我一直在研究类似的东西IFormatProvider
,IFormattable
但我真的不知道它们是否是我应该使用的东西,或者如何实现它们。
谁能解释我如何解决这个问题?
基本原理(以防万一你想知道......)
我有一个小程序,我可以在其中输入一组以逗号分隔的值和一个模板。string.Format
这些项目与创建输出的模板一起传递给。我想提供模板格式选项,以便用户可以控制他们希望如何输出项目。
c# - 为什么格式不起作用?
我有类客户,我需要在不更改客户类的情况下制作不同的格式。我为此创建了 CustomerFormatProvider。但是当 Customer.Format() 调用时,它会忽略 CustomFormatProvider.Format。为什么 ???请帮忙!!!!
c# - C# ASP.NET:无法将日期时间转换为字符串
我想将 a 转换datetime
为字符串。
但是现在返回的结果04 August, 0016
不是我需要的。
我希望结果是04 August, 2016
。
C#代码:
提前致谢 ;)
c# - 尝试实现自定义格式化程序,但从未调用 ICustomFormatter.Format
我试图弄清楚 IFormatProvider 和 ICustomFormatter在 DataGridView 列中的 Format TimeSpan 如何在 DataGridView 中自定义 TimeSpan 之后如何工作。我创建了一个完全自定义的格式化程序,无论格式化什么,它总是返回“foo”。
我在 Int 上使用它,但我认为它应该适用于所有类型,因为它不检查传递的值,它只是返回"foo"
.
我将它传递给int.ToString()
:
我得到的是:
虽然我希望得到的是:
编辑:我发现如何为 DateTime 创建和使用自定义 IFormatProvider?并且那里的答案说除了或DateTime.ToString()
之外什么都不会接受,如果一个对象不是这些类型,即使它实现了,它也会被拒绝- https://stackoverflow.com/a/2382481/492336。DateTimeFormatInfo
CultureInfo
ICustomFormatter
所以我的问题是,这是否适用于所有ToString()
方法的情况?它是否也适用于 DataGridView,在哪些情况下我可以传递真正自定义的格式化程序?
c# - 创建可以解析百分比的 IFormatProvider
我在实现一个IFormatProvider类时遇到了一些麻烦,该类可以将包含百分比的字符串解析为它们的等效数字。
问题不在于解析。Stackoverflow 提供了几种解决方案来将包含百分比的字符串解析为数字。
我宁愿不实现新类型。恕我直言,百分比不是一种新类型,它只是显示数字的一种不同方式。百分号就像小数点。在某些文化中,这是一个点,在其他文化中,这是一个逗号。这也不会导致不同的类型,只会导致不同的字符串格式。
函数Double.Parse(string, IformatProvider) (et al) 提供了解析字符串的可能性,这与标准 Double.Parse 所做的略有不同。
我遇到的问题在IFormatProvider
. 可以订购Parse
功能以使用特殊的IFormatProvider
. 但是我不能给这个IFormatProvider
任何功能来做特殊的解析。(顺便说一句:格式化为字符串几乎可以正常工作)。
IFormatProvider 接口提供一个对象,该对象为格式化和解析操作提供格式化信息。... 典型的解析方法是 Parse 和 TryParse。
默认IFormatProvider
不Parse
(意味着函数,而不是动词解析)包含System.Globalization.NumberFormatInfoParse
中提到的百分比格式的字符串
所以我想,也许我可以创建自己的IFormatProvider
,它使用这个问题的第一行中提到的解决方案,这样它就可以用来根据提供的解析百分比NumberFormatInfo
,对于每种类型都有Parse
将字符串解析成的函数数字。
用法是:
我尝试过 的(这是第一个被要求的)
所以我创建了一个简单的IFormatProvider
并检查了如果我打电话Double.Parse
的话会发生什么IFormatProvider
调用使用:
确实,GetFormat
被调用,要求一个NumberFormatInfo类型的对象
类NumberFormatInfo
是密封的。NumberFormatInfo
因此,如果需要更改属性值,我只能返回一个标准。但是我不能返回提供特殊解析方法来解析百分比的派生类
String.Format(IFormatProvider,字符串,参数)
我注意到在转换为字符串时使用格式提供程序进行特殊格式化,适用于String.Format
. 在这种情况下GetFormat
,称为要求ICustomFormatter。您所要做的就是返回一个在ICustomFormatter.FormatICustomFormatter
中实现并执行特殊格式的对象。
这按预期工作。返回 ICustomFormatter 后,调用它的 ICustomFormat.Format,我可以在其中进行我想要的格式设置。
Double.ToString(IFormatProvider)
但是,当我使用Double.ToString(string, IFormatProvider)时,我遇到了与Parse
. 在GetFormat
一个密封NumberFormatInfo
的要求。如果我返回一个ICustomFormatter
,则返回的值将被忽略并使用默认值NumberFormatInfo
。
结论:
- String.Format(...) 可以与 IFormatProvider 一起正常工作,如果需要,您可以进行自己的格式化
- Double.ToString(...) 需要一个密封的 NumberFormatInfo,你不能自己格式化
- Double.Parse 需要一个密封的 NumberFormatInfo。不允许自定义解析。
那么:如何在 IFormatProvider 中提供 MSDN 承诺的解析?
c# - 在 C# 中解析非标准日期字符串
您将如何处理以下需要转换为 DateTime 对象的字符串值?
希望将其包含为公认的 DateTime 模式。当我遇到其他格式时,我只想实现一个新模式。