2016-11-30 87 views
1

我試圖定義一個JSON架構屬性定義JSON模式的貨幣類型

money: 12.12 

我主要擔心的是,最大的2位小數應該被允許。我最初試圖定義這個字段是

money: { 
    type: 'number', 
    minimum: 0, 
    multipleOf: 0.01 
} 

但是,由於floating point imprecision這個失敗。例如,使用tv4驗證器,數字147.41通過驗證,但是147.42失敗。有沒有其他方法來定義一個只允許最多2位小數的數字類型?

看來,「格式」屬性的目的是爲了實現這些類型的限制,但如果我這樣定義等等領域:

money: { 
    type: 'number', 
    format: 'currency', 
    minimum: 0 
} 

那我怎麼指定用「貨幣字段'格式應該只允許最多2位小數?

回答

1

您的最佳選擇可能會將您的貨幣值乘以100.然後您有整數,驗證應該正常工作。一般來說,使用浮點來存儲貨幣值是一個bug farm,所以即使技術上他們仍然是JSON中的浮點值,你最好轉向「整數」。

有些系統使用ISO貨幣代碼,小寫的第三個字母表示此類貨幣。例如英國便士GBp,美國便士USd。見https://stackoverflow.com/a/30635729/4323

+0

不幸的是,這不是我的選擇。模式中字段的定義必須與用戶輸入的格式相對應,並且我無法合理地要求用戶輸入貨幣金額,單位爲美分,便士等。 –

+0

@Dónal:我知道您會允許用戶輸入全部美元。但是什麼阻止你轉換爲存儲?從技術上講,用戶無論如何都要輸入一個字符串 - 您已經將其轉換爲浮點值。 –

+0

我沒有簡單的方法來攔截這些值,將它們從美分轉換爲美元,反之亦然。表單中輸入的金額直接存儲在Firebase中。由模式定義的值將是那些持久化的值,我完全依賴於模式進行驗證 –