我有一个从epoch开始返回秒的函数:
public static string getEpochSeconds()
{
TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
var timestamp = t.TotalSeconds;
return timestamp.ToString();
}
它输出,例如: 1373689200.79987 但是出于我的应用目的,我需要输出一个小数位数 - 例如 1373689200.799873 。这怎么可能?
谢谢!
答案 0 :(得分:6)
尝试使用
return String.Format("{0}", timestamp.TotalSeconds);
然后你可以使用格式字符串。有关格式信息,请参阅this MSDN article。
修改1:
感谢@MortenMertner提供正确的格式。
尝试使用:
return String.Format("{0:N6}", timestamp.TotalSeconds);
强制小数点后6位。
编辑2:
您可以查找custom numeric format strings和standard numeric format strings以找出执行此操作的最佳方式。
一种方法是使用F
代替N
(两者都是standard numeric format strings)。 N
将逗号分隔F
不会的数千个。
return String.Format("{0:F6}", timestamp.TotalSeconds);
编辑3:
正如@ sa_ddam213在他的回答中指出的那样,标准ToString()
方法有一个接受格式化参数的重载。对于Double
MSDN documents it here,您可以清楚地看到它接受standard numeric format string或custom numeric format string,因此@ sa_daam213的答案也非常有效,与原始代码非常相似但不是N6
使用F6
,就像我上面的编辑2 一样。
答案 1 :(得分:4)
您可以使用timestamp.ToString("0.000000")
如果您需要没有舍入值的结果
return t.TotalSeconds.ToString("F0")+"." +t.ToString("ffffff");
答案 2 :(得分:3)
您应该可以在N6
ToString()
(小数点后6位)
示例:
public static string getEpochSeconds()
{
TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
var timestamp = t.TotalSeconds;
return timestamp.ToString("N6");
}
答案 3 :(得分:1)
如果最后一位数字不重要,您可以使用ToString("N6")
(在这种情况下,最后只添加0)。但是如果你想要真正的最后一位数,由于某种奇怪的方式将.NET转换成双字符串,你可能需要以下内容。
public static string getEpochSeconds()
{
TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
//t {15901.03:57:53.6052183} System.TimeSpan
var timestamp1 = t.TotalSeconds;
//timestamp1 1373860673.6052184 double
var tstring1 = timestamp1.ToString("N6");
//tstring1 "1,373,860,673.605220" string
var timestamp = (long)(t.TotalSeconds * 1000000);
//timestamp 1373860673605218 long
string tstring =timestamp.ToString();
//tstring "1373860673605218" string
tstring = tstring.Substring(0, tstring.Length - 6) + "." + tstring.Substring(tstring.Length - 6);
//tstring "1373860673.605218" string
return tstring;
}
我已将输出添加为评论。希望这会有所帮助。