为什么c#不显示变量的变化?

时间:2014-01-23 21:46:18

标签: c# variables precision

我通过这些值尝试了这段代码:

float timeStamp;
a=1338526801      
    b=113678

 timeStamp = a +( b / 1000000);

然后我将b更改为113680并计算了timeStamp,

timeStamp = a+ (b / 1000000) ;

实际上timeStamp应该更改,因为b已被更改,但是当我通过console.writeline()打印它时,timeStamp值不会改变。我认为它指的是c#的精度值,但我不知道如何解决它。

1 个答案:

答案 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

您还可以查看TimespanDateTime,它们可以提供100纳秒单位的准确度。由于微秒(us)中有10个刻度,因此相同的TimeSpan将是:

TimeSpan time = new TimeSpan(3385268011136780);

其中一条评论暗示您可能正在尝试转换Unix时间。如果是这样,那么您可以将Timespan添加到代表1/1/1970的正确DateTime。