在ASP.NET C#中,我發佈一個值,並在回發我需要解析它爲一個長期價值。以及它看起來,與浮點的值被視爲非數字(或至少非長值) 並且如果發佈值爲50.1long.TryParse double值
long x=0;
long.TryParse(Request.Form["x"], out x);
返回0這是默認值。但我需要得到50
在ASP.NET C#中,我發佈一個值,並在回發我需要解析它爲一個長期價值。以及它看起來,與浮點的值被視爲非數字(或至少非長值) 並且如果發佈值爲50.1long.TryParse double值
long x=0;
long.TryParse(Request.Form["x"], out x);
返回0這是默認值。但我需要得到50
返回0是正確的。如果你看看Int64.TryParse它說它只解析整數值。 50.4
不是整數值。
相反,您可以將它解析爲Double然後將其舍入。
long x = 0;
Double value = 0;
if(Double.TryParse("50.4", out value))
{
x = (long)Math.Truncate(value);
}
我知道你編輯過'x == Double.NaN',但我只想告訴你關於我學到的一些難題。 '=='不能與'NaN'正常工作。您需要使用'Double.IsNaN(x)'來獲得準確的結果。 –
@ScottChamberlain:謝謝 - 我正在回答速度問題,並記得有一種靜態的檢查方法。只是想在重新考慮我的答案之前查看它。:) – Ian
「Int64將容納比Double更大的值可以處理」 - 嗯,不。最大int64:約9.2e19。最大雙倍:約1.7e308。最大小數點:大約7.9e28。 double的缺點是精度的損失,而不是範圍......雙精度比Int64中的尾數比特更少。 –
這是預期的行爲,因爲50.1不是一個很長的值。你應該做的是先將它轉換爲Double,然後截斷它。
double x1, x2;
double.TryParse(Request.Form["x"], out x1);
x2 = Math.Truncate(x1);
如果您擔心該值太大而無法放入double,那麼您必須將其作爲字符串操作。
long x;
var splits = Request.Form["x"].Split('.');
long.TryParse(splits[0], out x);
請注意,我沒有檢查,如果分割的結果是否有效,但應該讓你開始。
我其實是想到了這一點,但我不確定double是否能夠長期有很大的價值。值可能非常大 –
@AshkanMobayenKhiabani - 然後,您需要先將它用作字符串。按「」分割。然後解析適當的部分。 –
@AshkanMobayenKhiabani然後使用[Decimal.TryParse](http://msdn.microsoft.com/en-us/library/system.decimal.tryparse.aspx)而不是double。 –
如果你真的檢查TryParse的返回值(因爲這是它的重點),它可能會幫助你。 – poke
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –