2014-04-11 20 views
1

C#代碼:演員在Javascript像在C#

float floatA = 4; 
float floatB = 17; 
float floatC = floatA/floatB; //0.235294119 

double doubleA = 4; 
double doubleB = 17; 
double doubleC = doubleA/doubleB; // 0.23529411764705882 
float res = (float)doubleC; // 0.235294119 

JS代碼:

var a = 4; 
var b = 17; 
var c = a/b; // 0.23529411764705882 
var res = (a/b).toPrecition(9); // 0.235294118 

爲什麼floatC &資源是0.235294119代替0.235294118?

c#中的doubleC與js中的c相同。 基本上我需要在javascript中對數字進行舍入與c#相同(雙浮動)

+3

http://stackoverflow.com/questions/11085052/round-twice-error-in-nets-double-tostring-method – adeneo

+1

1176應該是118時,應該是118而不是119,所以問題可能是在C#中,而不是在JavaScript中,這似乎是正確的。 – adeneo

+2

差異是百億分之一。你在測量什麼,需要這種精度? C#和Javascript都沒有向你保證,浮點運算總是從運行開始一直執行;只要保持每個計算的最小精度,兩種語言都可以隨意改變實際結果,因爲他們認爲合適。你不應該問「如何確保結果是相同的」,而你不能這樣做,你應該問的問題是「如果引入一百億分之一的錯誤,我該如何確保我的程序正常工作?」 –

回答

0

作爲一個浮點數,4/17 = 0.23529411852359771728515625。四捨五入至9位,即0.235294119。

作爲雙倍數,4/17 = 0.235294117647058820264049927573068998754024505615234375。四捨五入至9位,即0.235294118。

這是如預期的四捨五入。