2011-11-20 14 views
15

"%.3f".format(1)1.000 देता है।
"%.3f".format(4.0/3.0)1.333 देता है।स्केल में स्ट्रिंग स्वरूपण - अधिकतम दशमलव परिशुद्धता

क्या इन वापसी 1 और 1.333 होने का कोई आसान तरीका है? मैंने सोचा कि मानक printf प्रारूप निर्दिष्ट है कि सटीक अधिकतम पहले से ही सटीक है, लेकिन स्पष्ट रूप से स्कैला में नहीं है।

+1

स्कैला सामान्य जावा स्वरूपण का उपयोग करता है, इसलिए सवाल वास्तव में स्कैला-विशिष्ट नहीं है। स्वरूपण तारों के पूर्ण विवरण के लिए http://download.oracle.com/javase/7/docs/api/java/util/Formatter.html देखें। –

+2

'"% .3f ".format (1)' 1.000 वापस नहीं आता है, लेकिन विफल रहता है। '"% .3 एफ ".format (1.0)' या 1f की आवश्यकता है। अन्यथा आपको 'java.util.IllegalFormatConversionException: f! = Java.lang.Integer' –

उत्तर

23

डिफ़ॉल्ट printf द्वारा प्रयोग किया जाता फ़ॉर्मेटर एक सामान्य एक है कि [DecimalFormat][1] से सभी एक ही समर्थन नहीं है हो रहा है। अधिक जानकारी के लिए http://docs.oracle.com/javase/tutorial/java/data/numberformat.html: आप उन पंक्तियों के साथ एक कस्टम फ़ॉर्मेटर का दृष्टांत कर सकते हैं:

scala> import java.text.DecimalFormat 
import java.text.DecimalFormat 

scala> val formatter = new DecimalFormat("#.###") 
formatter: java.text.DecimalFormat = [email protected] 

scala> formatter.format(1) 
res36: java.lang.String = 1 

scala> formatter.format(1.34) 
res37: java.lang.String = 1.34 

scala> formatter.format(4.toFloat/3) 
res38: java.lang.String = 1.333 

scala> formatter.format(1.toFloat) 
res39: java.lang.String = 1 

देखें।

6

"%.3f".format(1) गलत प्रकार की वजह से एक java.util.IllegalFormatConversionException फेंक देते हैं (Float की उम्मीद है और आप एक Int दें)।

यदि आप "%.3f".format(1.0) का उपयोग करते हैं, तो भी आपको 1.000 मिल जाएगा।

आप की तरह एक विधि का उपयोग कर सकते हैं अपेक्षित परिणाम प्राप्त करने के लिए निम्नलिखित:

def format(x:AnyVal):String = x match { 
    case x:Int => "%d".format(x) 
    case x:Long => "%d".format(x) 
    case x:Float => "%.3f".format(x) 
    case x:Double => "%.3f".format(x) 
    case _ => "" 
} 

इस विधि की उम्मीद तर्क प्रकार के आधार पर प्रारूप वापस आ जाएगी।

+2

यह अभी भी 1.0f –

0

फ़ॉर्मेटिंग के बाद शून्य से छुटकारा पाने के बारे में कैसे?

scala> Array(1.0,1.10,1.110).map("%.3g" format _).map(_.replaceAll("[.0]*$","")) 
res7: Array[java.lang.String] = Array(1, 1.1, 1.11) 
+2

के लिए "1.000" देता है, इसके साथ सावधान रहें, क्योंकि यह दशमलव बिंदु के रूप में उपयोग करने के लिए लोकेल का उपयोग करता है । और यह एक ',' हो सकता है और नहीं '।' – Heptic

संबंधित मुद्दे