Вы должны взглянуть на 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.
Нет, вы не пробовали этот код, потому что он даже не компилируется. Пожалуйста, разместите фактический код, который у вас есть. Ваш вопрос/вопрос также довольно неясен, пожалуйста, уточните, что вы пытаетесь сделать, что вы ожидали, и что на самом деле произошло. – tnw
поэтому используйте более «двойную». – Harrison
Используйте 'DateTime.Seconds' или конвертируйте' DateTime' в Ticks. Поплавки/двойники по своей сути являются неточными. Википедия, несомненно, имеет хорошее объяснение стандарта IEEE с плавающей запятой, если вы хотите знать, почему. – evanmcdonnal