問題很簡單。我有一個我想要轉換爲浮動的雙。將C#中的double轉換爲float值給出錯誤的值
double doubleValue = 0.00000000000000011102230246251565;
float floatValue = (float)doubleValue;
現在當我這樣做。浮動價值只是瘋狂。它的值是「1.110223E-16」我需要爲此流量做些額外的事情嗎?值應該是0或0.1,但它不在這裏。這裏有什麼問題?
問題很簡單。我有一個我想要轉換爲浮動的雙。將C#中的double轉換爲float值給出錯誤的值
double doubleValue = 0.00000000000000011102230246251565;
float floatValue = (float)doubleValue;
現在當我這樣做。浮動價值只是瘋狂。它的值是「1.110223E-16」我需要爲此流量做些額外的事情嗎?值應該是0或0.1,但它不在這裏。這裏有什麼問題?
轉換double
到float
肯定會失去精度。但值1.110223E-16
是指數表示法,即升至-16,這意味着它類似於0.0000000000000001110223
。
您應該使用Math.Round()圓號碼。
啊,它是一樣的。我的代碼中存在另一個問題。我正在檢查這個數字是否在兩個數字之間,並且是假的。它工作正常,雙倍。但是現在當我重新檢查時,這個人改變了這個範圍,並且條件變成了錯誤。 –
浮球很完美。它代表了浮點精度的雙倍值。
1.110223E-16
是0.0000000000000001110223
另一個符號。
所以通常情況下,你可以損精,當您轉換Double
到float
。 1.110223E-16
與其代表0.0000000000000001110223
相同。
如果你想圓最接近的數字你的價值觀,你可以使用Math.Round()
方法。
將值舍入爲最接近的整數或指定的小數位數 。
浮子能夠表示大約6 顯著數字完全準確的。這與6 小數位不一樣,這是我認爲你所假設的。
實際上它是給予正確的值。
如何轉換爲浮動
double doubleValue = 0.00000000000000011102230246251565;
float result = (float)doubleValue;
decimal d = Decimal.Parse(result.ToString(), System.Globalization.NumberStyles.Float);
你想圓了你的'Double'值後襬脫指數?不是嗎? – Usman