2011-08-22 44 views
2
it ("tests a positive zero", function() { 
    expect((Math.sin(-1*Math.PI)*300).toFixed(3)).toEqual("0.000"); 
    }); 

但它失敗了,因爲它產生-0.000(在鉻和safari測試)。使用regexp.replace刪除 - 是我最後(當前唯一的解決方案)有更多?toFixed(3)-6.1e-15返回-0.000,我該如何溝渠減號?

+0

耶,浮點數和舍入的問題。 –

+0

還有'Math.abs' – bfavaretto

+0

返回絕對值? – kd7

回答

3
Math.abs(number);//<<absolute value 
+0

這隻返回「0」,而不是「0.000」,僅爲FYI。 –

+1

@Rocket ...所以使用'parseFloat()'..或其他東西來轉換它。另外:'0 === 0.000' – Neal

+0

@Kooilnc但適用於Math.sin(Math.PI/-2)不會產生正確的結果。我希望有一個參數在toFixed或另一種方法,我可以應用一些數字格式,因爲我可以在java或perl(甚至excel) –

1

測試「正零」不正確。如果你想要的數字是0.000到三個DP,只需檢查數字是否在(-0.0005,0.0005)之內。例如,

expect(Math.sin(-Math.PI) * 300).between(-0.0005, 0.0005); 

(您可能需要一個between方法添加到您的expect,如果它不提供它以不同的名稱。)

+0

什麼是期望(...)。(...)之間? –

+0

@火箭:這是一個假設的功能,可能(希望)由OP使用的單元測試庫提供。如果該值不在給定的範圍內,它會拋出異常。 –

2

豈不Math.abs((Math.sin(-1*Math.PI)*300)).toFixed(3)工作?

[根據註釋編輯]或:

Number((Math.sin(-1*Math.PI)*300).toFixed(3)).toFixed(3);

+0

@Kooilnc - 請參閱OP的評論我的答案(不知道爲什麼它的存在) – Neal