1
這不是一個真正的大問題,但我很好奇,我想知道爲什麼在像「1.1 - 1」(1.1爲單數,1爲整數)之後,結果等於0.09999而不是1(自然地,1.1-1 = 0.1)。爲什麼一個變量給出0.09999而不是0.1?
我用一個「1.0」替換了整數「1」,它的工作正常。
謝謝,對不起我的英語。
A.
這不是一個真正的大問題,但我很好奇,我想知道爲什麼在像「1.1 - 1」(1.1爲單數,1爲整數)之後,結果等於0.09999而不是1(自然地,1.1-1 = 0.1)。爲什麼一個變量給出0.09999而不是0.1?
我用一個「1.0」替換了整數「1」,它的工作正常。
謝謝,對不起我的英語。
A.
你需要知道數據是如何存儲在內存中,先看看整數例如int
short
unsigned long long
它們存儲在內存中,每個不同的位配置意味着不同的數字,所以它的罰款,同樣的情況是與float
號碼,不同的位配置意味着不同的號碼,所以讓我們看看類型的限制。比較int
和float
他們都是32位數字。 int
限制是–2147483648 to 2147483647
4294967296不同的值,因此,如何float
#define FLT_MAX 3.402823466e+38F /* max value */
#define FLT_MIN 1.175494351e-38F /* min positive value */
所以當你看到範圍是多少更廣,但不同值的數量是相同的,所以你不能有這樣的精度好,你也可以閱讀更多有關float
標準IEEE754 here或here
搜索「浮點(或雙精度)格式」和「浮點(或雙精度)精度損失」。你也可以使用'decimal'格式。 – SJuan76
由於浮點(有限)精度。閱讀[this](https://ece.uwaterloo.ca/~dwharder/NumericalAnalysis/02Numerics/Double/paper.pdf) – memo1288
謝謝你的回答! –