2013-06-27 96 views
2

問題很簡單。我有一個我想要轉換爲浮動的雙。將C#中的double轉換爲float值給出錯誤的值

double doubleValue = 0.00000000000000011102230246251565; 
float floatValue = (float)doubleValue; 

現在當我這樣做。浮動價值只是瘋狂。它的值是「1.110223E-16」我需要爲此流量做些額外的事情嗎?值應該是0或0.1,但它不在這裏。這裏有什麼問題?

+0

你想圓了你的'Double'值後襬脫指數?不是嗎? – Usman

回答

10

轉換doublefloat肯定會失去精度。但值1.110223E-16是指數表示法,即升至-16,這意味着它類似於0.0000000000000001110223

您應該使用Math.Round()圓號碼。

+0

啊,它是一樣的。我的代碼中存在另一個問題。我正在檢查這個數字是否在兩個數字之間,並且是假的。它工作正常,雙倍。但是現在當我重新檢查時,這個人改變了這個範圍,並且條件變成了錯誤。 –

1

浮球很完美。它代表了浮點精度的雙倍值。

1.110223E-160.0000000000000001110223另一個符號。

1

Double雙精度浮點數float單精度浮點數

所以通常情況下,你可以損精,當您轉換Doublefloat1.110223E-16與其代表0.0000000000000001110223相同。

如果你想圓最接近的數字你的價值觀,你可以使用Math.Round()方法。

將值舍入爲最接近的整數或指定的小數位數 。

看一看該Floating-Point Guide

0

浮子能夠表示大約6 顯著數字完全準確的。這與6 小數位不一樣,這是我認爲你所假設的。

0

實際上它是給予正確的值。

如何轉換爲浮動

double doubleValue = 0.00000000000000011102230246251565; 
float result = (float)doubleValue; 
decimal d = Decimal.Parse(result.ToString(), System.Globalization.NumberStyles.Float); 
相關問題