2009-12-03 19 views
13

क्या पर्ल स्क्रिप्ट के फ्लोटिंग पॉइंट परिशुद्धता (3 अंकों) को सेट करने का कोई तरीका है, इसे विशेष रूप से प्रत्येक चर के लिए बदलने के बिना?मैं पर्ल में फ़्लोटिंग पॉइंट परिशुद्धता कैसे सेट करूं?

कुछ TCL के समान:

global tcl_precision 
set tcl_precision 3 
+0

आप दशमलव के बाद ही तीन अंक, या तीन अंक चाहते हैं? एक अंतर है :) –

+0

उनमें से कोई भी करने का कोई तरीका है? –

उत्तर

12

यह परिवर्तन विश्व स्तर पर कोई तरीका नहीं है।

यदि यह केवल प्रदर्शन उद्देश्यों के लिए है तो sprintf("%.3f", $value); का उपयोग करें।

गणितीय उद्देश्यों के लिए, (int(($value * 1000.0) + 0.5)/1000.0) का उपयोग करें। यह सकारात्मक संख्याओं के लिए काम करेगा। यद्यपि आपको नकारात्मक संख्याओं के साथ काम करने के लिए इसे बदलने की आवश्यकता होगी।

+1

यदि यह केवल प्रदर्शन उद्देश्यों के लिए है तो '$ # = '%। 3f'' सेट करें - देखें' perldoc perlvar' – mob

+0

' $ # 'पर्ल 5.10 :( – skaurus

+1

@ सिननुनूर नो, आप नहीं कर सकते! उदाहरण:' perl -ई '$ _ = 155; स्प्रिंटफ ("%। 2f", $ _/1000) कहें;' ''0.16' प्रिंट करना चाहिए लेकिन प्रिंट' 0.15'। (देखें: http://stackoverflow.com/q/24493228/734304) – kobame

19

उपयोग Math::BigFloat या bignum:

use Math::BigFloat; 
Math::BigFloat->precision(-3); 

my $x = Math::BigFloat->new(1.123566); 
my $y = Math::BigFloat->new(3.333333); 

या bignum साथ बजाय कार्य करें:

use bignum (p => -3); 
my $x = 1.123566; 
my $y = 3.333333; 

तो दोनों ही मामलों में:

say $x;  # => 1.124 
say $y;  # => 3.333 
say $x + $y; # => 4.457 
2

मैं sprintf का उपयोग करने की सिफारिश नहीं होगा ("% .3 एफ", $ मान)।

कृपया निम्न उदाहरण पर नजर: (6,02 * 1,25 = 7,525)

printf("%.2f", 6.02 * 1.25) = 7.52

printf("%.2f", 7.525) = 7.53

1

स्ट्रिंग के रूप परिणाम इलाज और substr का उपयोग करें। इस तरह:

$result = substr($result,0,3); 

यदि आप गोलाकार करना चाहते हैं, तो इसे स्ट्रिंग के रूप में भी करें। बस अगले चरित्र को प्राप्त करें और फैसला करें।

0

या आप जो कुछ भी काटना दशमलव बिंदु के बाद तीसरे अंकों के बाद आता है निम्नलिखित इस्तेमाल कर सकते हैं:

if ($val =~ m/([-]?[\d]*\.[\d]{3})/) { 
    $val = $1; 
} 
संबंधित मुद्दे