c# – IFormatProvider从double到string的科学转换 – 位数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – IFormatProvider从double到string的科学转换 – 位数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2204字,纯文字阅读大概需要4分钟。
内容图文
![c# – IFormatProvider从double到string的科学转换 – 位数](/upload/InfoBanner/zyjiaocheng/791/71dc1092eff341bb9b407e81c41dee3b.jpg)
我有从double到string的转换问题.
我想转换:
double value: 0.0772486324655191
string value: 0.0772486324655191
如果长度大于小数点后的16位数,我希望它像这样:
double value: 0.00063500244832493823
string value: 6.3500244832493823e-004
我试图用IFormatProvider模式转换它:
0.0000000000000000e000
但第一种情况的结果是
7.7248632465519100e-002
如何获取双向量中的位数?或者更好:我应该如何正确使用格式提供程序?
String specifier;
CultureInfo culture;
specifier = "0.0000000000000000e000";
culture = CultureInfo.CreateSpecificCulture("en-US");
Console.WriteLine(DoubleMirrored[0].ToString(specifier, CultureInfo.InvariantCulture));
解决方法:
为此,您肯定需要创建自定义格式化程序.
要创建自定义格式化程序,您应该知道:
string.Format具有以下重载:string.Format(IFormatProvider,string,object []),因此您必须创建一个IFormatProvider,它将“提供”ICustomFormatter,它将处理您的自定义格式.两个接口都可以轻松使用相同的类.
这里有一些代码完全符合您的描述:
public class DoubleFormatter : IFormatProvider, ICustomFormatter
{
// Implementation of IFormatProvider:
public object GetFormat(Type t) {
if (t == typeof(ICustomFormatter)) {
return this;
}
return null;
}
// Implementation of ICustomFormatter:
public string Format(string format, object arg, IFormatProvider provider) {
// Search for the custom "EE" format specifier:
if (format == null || !format.StartsWith("EE")) return null;
format = format.Substring(2); // Trim "EE"
// Determine how many digits before we cutoff:
int digits;
if (!int.TryParse(format, out digits)) {
throw new FormatException("Format must contain digits");
}
// Get the value: (note, this will work for any numeric type)
var value = Convert.ToDouble(arg);
// Convert to string without using Exponential format:
var output = value.ToString("0."+(new string('#',digits)), provider);
// Determine how many digits are showing: (this part isn't culture-compatible)
var length = output.Length - output.IndexOf(".");
if (length <= digits) {
return output;
} else {
return value.ToString("E"+format, provider);
}
}
}
以下是如何使用此代码的示例:
var tests = new[]{
0.0000055555,
0.00000555555555555555555,
};
var formatter = new DoubleFormatter();
foreach (var t in tests){
var result = string.Format(formatter, "{0:EE15}", t);
Console.WriteLine(result);
}
内容总结
以上是互联网集市为您收集整理的c# – IFormatProvider从double到string的科学转换 – 位数全部内容,希望文章能够帮你解决c# – IFormatProvider从double到string的科学转换 – 位数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。