JSON में डॉलर की रकम से गुजरने वाली सर्वोत्तम पद्धतियां क्या हैं?




floating-point (4)

मुझे नहीं लगता कि इस के आसपास एक 'सर्वोत्तम अभ्यास' है

मेरी सिफारिश, हालांकि, उन्हें फ़्लोट्स के रूप में सांकेतिक शब्दों में बदलना होगा ताकि आप डॉलर प्रदर्शित करने के तरीके के बीच में अंतर न करें। एक उदाहरण के रूप में, आप संभवतः पारित होने से बचने के लिए चाहते हैं

{ "dollars": "1,000$" }
{ "dollars": "1000.00$" }
{ "dollars": "1000.00" }
{ "dollars": "$1000.00" }

डॉलर का प्रतिनिधित्व करने का एक आसान तरीका फ्लोट्स का उपयोग कर रहा है परिशुद्धता भिन्न हो सकती है, जो एक अच्छी बात हो सकती है

{ "dollars": 1000.00 }
{ "dollars": 0.001231231 }

उस मामले के लिए देखें, जहां 0.00 0.0000 के रूप में राउंडिंग के कारण देता है

{ "dollars": 0.005 }

JSON में डॉलर की रकम से गुजरने वाली सर्वोत्तम पद्धतियां क्या हैं?

तार, या फ्लोट्स के रूप में राशि पास करना? या अन्य?

हम क्लाइंट (आईओएस / एंड्रॉइड / वेब) पर दिखाए गए गोल बंद त्रुटियों के बारे में थोड़ा चिंतित हैं, या दूसरे की तुलना में एक क्लाइंट पर प्रदर्शित संभवतः अलग-अलग मान हैं।


Answer #1

JSON में पूर्णांक और फ्लोटिंग-बिंदु मानों के लिए अलग-अलग प्रकार नहीं हैं इसलिए, JSON स्किमा पूर्णांक और गैर-पूर्णांक के बीच अंतर करने के लिए अकेले प्रकार का उपयोग नहीं कर सकता।

इसलिए, आप ऐसा कुछ करने की कोशिश कर सकते हैं

var jsonObj = [{
"amount": "$1234.46"
},{
"amount": "$2234.56"
},{
"amount": "$3234.66"
}];

for (var i in jsonObj) {
  jsonObj[i].amount = '$'+Math.round(jsonObj[i].amount.substring(1,jsonObj[i].amount.length));
}

console.log(jsonObj);

आशा है, यह आपके उम्मीद के अनुसार काम करेगा। धन्यवाद


Answer #2

मुझे लगता है कि एक समाधान एक पूर्णांक के रूप में राशि 100 गुजरता है

  • $ 100 -> 10000
  • $ 1.5 -> 150
  • $ 19.99 -> 1999

(कोई गोल त्रुटियाँ, डेटाबेस में सुरक्षित भंडारण, जब तक आप मुद्रा विनिमय बाजार में उदाहरण के लिए इसका उपयोग करते हैं तो आपको अधिक दशमलव की आवश्यकता नहीं है)।

इस तरह आप अपनी मात्रा (जोड़ या गुणा, ..) को हेरफेर कर सकते हैं, और इसे प्रदर्शित करने के लिए फिर से 100 से फिर से विभाजित करें।


Answer #3

प्रभावी जावा, द्वितीय संस्करण यहोशू ब्लाच ने कहा

फ्लोट और डबल प्रकार मौद्रिक गणनाओं के लिए विशेष रूप से खराब हैं क्योंकि यह फ्लोट के रूप में 0.1 या (दस की किसी भी अन्य नकारात्मक शक्ति) का प्रतिनिधित्व करना असंभव है या बिल्कुल दोगुना है।

उदाहरण के लिए, मान लें कि आपके पास $ 1.03 है और आप 42c खर्च करते हैं आप कितना पैसा छोड़ दिया है?

System.out.println (1.03 - .42); प्रिंट आउट 0.6100000000000001

इस समस्या को हल करने का सही तरीका BigDecimal, int या long का उपयोग करना है

फ्लोट वैरिएबल में कभी मौद्रिक मान न रखें। फ्लोटिंग प्वाइंट मुद्रा के उपयोग के लिए उचित बिंदु या दशमलव मानों के लिए उपयुक्त नहीं है।

बेहतर अगर मुद्रा कोड और कुछ भिन्न स्वरूपों में समान मूल्य प्रदान करें। 0.00234 की राशि के लिए इस सामान्य प्रतिक्रिया पर विचार करें

"amount": {
  "currency": "USD",
  "decimal": 0.00234,
  "integer": 234000,
  "integer_scale": 8,
  "pretty": "\u0e3f 0.00234 BTC",
  "string": "0.00234"
}

आपके पास दिए गए किसी भी संख्या स्वरूपों का उपयोग करने का विकल्प है

दशमलव: यह एक दशमलव संख्या स्ट्रिंग है: दशमलव के बराबर लेकिन उद्धृत है, इसलिए आपका जेएसओएन पुस्तकालय सोचता है कि यह एक स्ट्रिंग है। सुंदर: उपयोगकर्ताओं को दिखाए जाने के लिए तैयार एक स्ट्रिंग उचित मुद्रा संकेत और मुद्रा कोड शामिल हैं मुद्रा: मुद्रा के लिए 3-अक्षर कोड

निम्नलिखित दो उदाहरण API हैं:

1 - JSON में सामान्य मुद्रा कोड

{
    "USD": {
        "symbol": "$",
        "name": "US Dollar",
        "symbol_native": "$",
        "decimal_digits": 2,
        "rounding": 0,
        "code": "USD",
        "name_plural": "US dollars"
    },
    "CAD": {
        "symbol": "CA$",
        "name": "Canadian Dollar",
        "symbol_native": "$",
        "decimal_digits": 2,
        "rounding": 0,
        "code": "CAD",
        "name_plural": "Canadian dollars"
    },
    "EUR": {
        "symbol": "€",
        "name": "Euro",
        "symbol_native": "€",
        "decimal_digits": 2,
        "rounding": 0,
        "code": "EUR",
        "name_plural": "euros"
    }
}

https://gist.github.com/Fluidbyte/2973986

2 - फिक्सर एपीआई

http://api.fixer.io/latest

{
    "base": "EUR",
    "date": "2017-07-28",
    "rates": {
        "AUD": 1.4732,
        "BGN": 1.9558,
        "BRL": 3.7015,
        "CAD": 1.4712,
        "CHF": 1.1357,
        "CNY": 7.9087,
        "CZK": 26.048,
        "DKK": 7.4364,
        "GBP": 0.89568,
        "HKD": 9.1613,
        "HRK": 7.412,
        "HUF": 304.93,
        "IDR": 15639,
        "ILS": 4.1765,
        "INR": 75.256,
        "JPY": 130.37,
        "KRW": 1317.6,
        "MXN": 20.809,
        "MYR": 5.0229,
        "NOK": 9.3195,
        "NZD": 1.5694,
        "PHP": 59.207,
        "PLN": 4.2493,
        "RON": 4.558,
        "RUB": 69.832,
        "SEK": 9.5355,
        "SGD": 1.5947,
        "THB": 39.146,
        "TRY": 4.1462,
        "USD": 1.1729,
        "ZAR": 15.281
    }
}

JSON में मुद्रा मानों को स्वरूपित करने के लिए मानक क्या है?





floating-point