2011-04-11 18 views
2

我正在編輯一個帶數字的字段。我嘗試了一個文本字段,但由於它是一個數字數據類型進來,它並不順利 - 儘管重新編寫字符串作爲數字等..它不斷給我NaN作爲價值。所以我決定最好使用數字步進器。數值步進小數的奇怪行爲

當我最初加載它會放棄我所有的小數,只顯示我的整數數字。我將stepIncrement更改爲0.1,現在它顯示小數(一個奇怪的要求imo)..但是當我加強時,偶爾給我一個像'17.700000000000003'的值,當我期望17.7時。我的數據中的所有數字都有一個小數位。我知道我可以寫一個數據格式化器,但在這種情況下似乎不需要。

有沒有另一種方法可以解決這個問題?

回答

7

你已經偶然發現了試圖用IEEE 754等浮點二進制格式表示十進制數的妥協方法。並不是所有的十進制數都可以精確表示。您可以在這裏中非常詳細地在這個問題上讀了起來:

http://en.wikipedia.org/wiki/Floating_point#Representable_numbers.2C_conversion_and_rounding

您可以使用Number.toFixed(參數fractionDigits:UINT)顯示到小數點後任意數量。

+0

啊!不幸的是toFixed是一個字符串值,我需要從我的數據庫輸入和輸出數字。我嘗試'.toFixed(1)as Number',但它不管數值如何都會以0.1結尾。 – Damon 2011-04-12 01:19:20

+0

聽起來很可行。我不是一個Flex框架用戶,但是對組件描述的快速瀏覽讓我認爲你可以動態地操縱步進器的textField(TextInput)的maxChars屬性來隱藏不精確性。將maxChars設置爲四捨五入爲整數的數字位數加1.如果您仍然希望支持手動輸入數字,那麼可能會有點不方便(例如,如果您必須刪除對焦點的限制)。 – 2011-04-12 01:25:03

+0

非常符合邏輯!不幸的是,事實證明,maxChars是「你」可以輸入的字符的數量,而不是可以顯示的字符的數量...... – Damon 2011-04-12 01:36:41

0

您可以使用valueFormatFunction,它接受數值並將其格式化爲一個字符串。您需要在數字步進器上設置明確的寬度,以使它們適合。

0

在MXML

<s:NumericStepper valueFormatFunction="stepperFormatter"/> 

在腳本

protected function stepperFormatter(newValue:Number):String 
{ 
    return Math.ceil(newValue).toString() 
}