我通过这些值尝试了这段代码:
float timeStamp;
a=1338526801
b=113678
timeStamp = a +( b / 1000000);
然后我将b
更改为113680
并计算了timeStamp,
timeStamp = a+ (b / 1000000) ;
实际上timeStamp应该更改,因为b
已被更改,但是当我通过console.writeline()打印它时,timeStamp值不会改变。我认为它指的是c#的精度值,但我不知道如何解决它。
答案 0 :(得分:-1)
您应该查看Floating-Point Types Table (C# Reference),其中提供了以下信息
> Type Approximate range Precision
> float ±1.5e−45 to ±3.4e38 7 digits
> double ±5.0e−324 to ±1.7e308 15-16 digits
338526801
+ 113678
/ 1000000的组合大约是16位数,最适合双倍。
包含7位数字的浮点数可以让你精确到338526800.000000而不再是
float f = 338526801 + 113678f/1000000
System.Diagnostics.Debug.Print(f.ToString("F6")); // results in 338526800.000000
然而,双倍获得15-16位数字实际上可以将数据存储到您的精确度。
double d = 338526801d + 113678d/1000000
System.Diagnostics.Debug.Print(d.ToString("F6")); // results in 338526801.113678
您还可以查看Timespan
和DateTime
,它们可以提供100纳秒单位的准确度。由于微秒(us)中有10个刻度,因此相同的TimeSpan将是:
TimeSpan time = new TimeSpan(3385268011136780);
其中一条评论暗示您可能正在尝试转换Unix时间。如果是这样,那么您可以将Timespan添加到代表1/1/1970的正确DateTime。