मैं डेल्फी को एक्सेल की तरह गोल करने की कोशिश कर रहा हूं लेकिन मैं नहीं कर सकता।एक्सेल की तरह गोल करने के लिए डेल्फी मुद्रा प्रकार कैसे प्राप्त करें?
procedure TForm1.Button1Click(Sender: TObject);
var
s : string;
c : currency;
begin
c := 54321.245;
s := '';
s := s + Format('Variable: %m',[c]);
s := s + chr(13);
s := s + Format(' Literal: %m',[54321.245]);
ShowMessage(s);
end;
मुझे मुद्रा परिवर्तनीय कि 54,321.245 पर सेट किया जाता का उपयोग कर रहा है और जब मैं इस चर यह बैंकर्स गोलाई का उपयोग कर दौर से प्रारूप: यहाँ कोड है। हालांकि, जब मैं एक समान मूल्य को एक शाब्दिक के रूप में प्रारूपित करता हूं तो यह एक्सेल राउंड के तरीके से गुजरता है।
मैं इसे $ 54,321.25 पर जाने की उम्मीद कर रहा था चाहे वह मुद्रा परिवर्तनीय या शाब्दिक मूल्य बना रहा हो। मैं यह कैसे सुनिश्चित कर सकता हूं कि डेल्फी हर समय एक्सेल के समान ही गोल करता है?
संपादित
The rounding I expect to see is as follows:
54,321.245 = 54,321.25
54,321.2449 = 54,321.24
54,431.2499 = 54,421.25
मैं केवल शाब्दिक उपयोग कर रहा हूँ अलग अलग तरीकों से डेल्फी दौर को दिखाने के लिए। मैं वास्तविक कोड में चर का उपयोग करने की उम्मीद करता हूं।
नोट:
अगर मैं मुद्राको बढ़ाया से चर बदलने इसे सही ढंग से दौर
# संपादित 2
कुछ सुझाव दिया है कि मैं एक की जरूरत नहीं है मेरी आवश्यकताओं की स्पष्ट समझ, यह बिल्कुल सही नहीं है। मुझे अपनी आवश्यकताओं की बहुत स्पष्ट समझ है, मैं स्पष्ट रूप से उन्हें समझाने का बहुत अच्छा काम नहीं कर रहा हूं। राउंडिंग विधि जो मैं चाहता हूं वह दो दशमलव स्थान है। जब दशमलव भाग में हजारों मूल्य होते हैं> = 0.005 मैं इसे 0.01 तक गोल करना चाहता हूं, डेल्फी द्वारा प्रस्तावित मुद्रा प्रकार ऐसा नहीं करता है। मैंने माइक्रोसॉफ्ट एसक्यूएल का उपयोग करके एक पैसा डेटाटाइप (जिसे मैंने माना था डेल्फी की मुद्रा के समान था) के साथ इस उदाहरण का भी प्रयास किया था और एसक्यूएल ने जिस तरह से वर्णन किया है, उसके अनुसार एसक्यूएल राउंड।
- एसक्यूएल मनी> = 0,005 = 0,01
- डेल्फी मुद्रा> = 0.005: = 0,00
# संपादित 3
अच्छा अनुच्छेद: http://rvelthuis.de/articles/articles-floats.html
संभव समाधान: http://rvelthuis.de/programs/decimals.html
संपादित करें # 4
यहाँ Embarcadero चर्चा से समाधान में से एक है
function RoundCurrency(const Value: Currency): Currency;
var
V64: Int64 absolute Result;
Decimals: Integer;
begin
Result := Value;
Decimals := V64 mod 100;
Dec(V64, Decimals);
case Decimals of
-99 .. -50 : Dec(V64, 100);
50 .. 99 : Inc(V64, 100);
end;
end;
आप यह सुनिश्चित करें कि एक्सेल अपने सभी API और सुविधाओं भर गोलाई में 100% संगत है कर रहे हैं? –
@Warren - नहीं, मैं 100% निश्चित नहीं हूं। मैं वित्तीय अनुप्रयोगों को बेचता हूं और मुझे यह सुनिश्चित करने की ज़रूरत है कि मेरी संख्या मेल खाती है जो एक्सेल बाहर निकलती है। –
इस प्रश्न का सही उत्तर देने के लिए, आपको वास्तव में हमें यह बताना होगा कि आप किस प्रकार की राउंडिंग की उम्मीद करते हैं। –