2014-01-23 3 views
-4

Я попробовал этот код этих значения:Почему C# не показывает изменения в переменной?

float timeStamp; 
a=1338526801  
    b=113678 

timeStamp = a +(b/1000000); 

я изменил b к 113680 и вычислил TIMESTAMP,

timeStamp = a+ (b/1000000) ; 

в реальной Отметке время должна измениться, потому что b был изменен , но когда я печатаю его с помощью console.writeline(), значение timeStamp не изменяется. Я думаю, что это относится к точности значений C#, но я не знаю, как его разрешить.

+11

Нет, вы не пробовали этот код, потому что он даже не компилируется. Пожалуйста, разместите фактический код, который у вас есть. Ваш вопрос/вопрос также довольно неясен, пожалуйста, уточните, что вы пытаетесь сделать, что вы ожидали, и что на самом деле произошло. – tnw

+0

поэтому используйте более «двойную». – Harrison

+1

Используйте 'DateTime.Seconds' или конвертируйте' DateTime' в Ticks. Поплавки/двойники по своей сути являются неточными. Википедия, несомненно, имеет хорошее объяснение стандарта IEEE с плавающей запятой, если вы хотите знать, почему. – evanmcdonnal

ответ

-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-наносекундных единицах. Поскольку существует 10 тиков в микро-секунду (нас), то же TimeSpan будет:

TimeSpan time = new TimeSpan(3385268011136780); 

Одно из замечаний предложил вам, возможно, пытается преобразовать Unix Time. Если это так, вы можете добавить Timespan к правильному DateTime, представляющему 1/1/1970.

+0

Нет, потому что он делит ts_usec на 1000000, поэтому после изменений в его значении может произойти его проскальзывание, поэтому значение временной метки не изменяется, то есть моя проблема –

+0

@marziyeesmslampanah Я добавил дополнительную информацию, которая поможет вам понять вопрос. – Harrison

+0

Большое спасибо, я думаю, что я должен использовать timepan или DateTime для решения моей проблемы, но я не знаю, как определить эти типы переменных. –

Смежные вопросы