2014-01-24 119 views
-1

我写了一个程序,它使用浮点型变量,并且在计算了一些函数之后,它没有足够精确的结果。 我的计划是C#精确浮点型变量

int x=0; 
ts_sec = 1338526801;  
ts_usec = 113676; 
while(ir<2) 
{ 
    Console.Write("ts_sec:" + ts_sec+"\t"); 
    Console.Write("ts_usec:" + ts_usec+"\t"); 
    if (x == 0)       
    { 
     floatstart = ts_sec + ts_usec/1000000; 
     Console.Write("startTime" + floatstart+"\t"); 
     x=x+1; //x=1 
    }    
    timeStamp = ts_sec + ts_usec/1000000 - floatstart;       // 
    Console.Write("timestamp is" + timeStamp+"\n"); 
    ts_sec = 1338526801;  
    ts_usec = 113676; 
    ir++; 
} 

这是我出来放:

ts_sec:1338526801 ts_usec:113676 startTime1.338527E + 09
时间戳IS0 ts_sec:1338526801 ts_usec:113678
时间戳IS0

但我想我的输出将是这样的,我希望我的结果没有E。

ts_sec:1338526801 ts_usec:113676开始时间:1338526801.11368
时间戳:0 ts_sec:1338526801 ts_usec:113678
时间戳:1.9073486328125e-006

+1

如果你知道一个浮动是如何保存到内存中,你知道,你可以”没准确。它的保存像1.23E12或1.23E-2(你可以设计出E但仍然缺乏精确度) – chillworld

回答

0

如果你想更精确的使用decimal

decimal关键字表示128位数据类型。与浮点类型相比,小数类型具有更高的精度和更小的范围,因此适用于财务和货币计算。

1

首先,将float(32位)更改为double(64位)以提高近两倍的精度;第二,如果你不想在结果中科学表示是(即“E”)选择合适的格式化

Double startTime = ... 
    // Assuming that you want 5 digits after the decimal point 
    String result = startTime.ToString("F5");