2012-07-22 9 views
5

द्वारा दशमलव कॉलम में दशमलव डेटा संरेखित करें मैं एक वर्डप्रेस प्लगइन बना रहा हूं जो एक HTML तालिका उत्पन्न कर रहा है और शोर्ट के माध्यम से गुरुत्वाकर्षण एचटीएमएल ब्लॉक को भेज रहा है।दशमलव बिंदु, एचटीएमएल 5, CSS3

मेरे समस्या यह है कि सेल सामग्री समाहित कर सकता है:

  • 23,24
  • 1,234.665
  • 123,4

आदि ...

सूचना दशमलव स्थानों के भिन्न संख्या।

क्या गैर-हैक & सर्वोत्तम अभ्यास दशमलव बिंदु से इस कॉलम डेटा को संरेखित करने का तरीका है? इस मामले में, सही संरेखण काम नहीं करेगा।

0 सम्मिलित करना स्वीकार्य नहीं है क्योंकि इससे सटीकता की एक डिग्री इंगित होती है जो वहां नहीं है।

जैसा कि आप देख सकते हैं, मैंने align="char" char="." का उपयोग किसी भी भाग्य के साथ टीडी तत्वों के अंदर करने का प्रयास किया है।

किसी भी मदद से कोई भी मदद कर सकता है इसकी सराहना की जाएगी।

बहुत धन्यवाद।

क्या printf("%8.3f",d1) का उपयोग करने का कोई तरीका है या वास्तव में स्क्रीन पर प्रिंट किए बिना समान है? जैसे बाद के उपयोग के लिए चर डी 1 संरचना? लेकिन वास्तव में इसे मुद्रित नहीं?

+0

आप किस भाषा एचटीएमएल उत्पन्न करने के लिए प्रयोग कर रहे हैं? –

+0

PHP एचटीएमएल उत्पन्न कर रहा है। – Gravy

+0

php में संख्याओं को प्रारूपित करने के तरीके के लिए मेरा अद्यतन उत्तर देखें। –

उत्तर

0

बात यह है कि, आपको यह सुनिश्चित करना होगा कि उनके पास दशमलव के बाद अंकों की संख्या समान है।

एक बार ऐसा करने के बाद, text-align का उपयोग करें। यह सब ले जाएगा: style='text-align: right'

बेहतर अभी भी, आप इनलाइन शैलियों की बजाय एक सीएसएस कक्षा का उपयोग कर सकते हैं। अपने स्टाइलशीट में फिर

<tr><td>Item 1</td><td>15</td><td class='price'>&pound;123.25</td></tr> 

:: अपने मार्कअप इस प्रकार दिखाई देगा

td.price{ 
    text-align: right; 
} 

php के साथ, आप number_format के साथ एक स्ट्रिंग के रूप में एक नंबर फ़ॉर्मेट कर सकते हैं। आपको इसे गूंजने या प्रिंट करने की आवश्यकता नहीं है, बस उस फ़ंक्शन में अपना चर लपेटें। उदाहरण के लिए:

$table .= "<td class='price'>&pound;" . $price . "</td></tr>"; 

हो जाता है:

$table .= "<td class='price'>&pound;" . number_format($price,3) . "</td></tr>"; 
+0

मुझे पहले से ही इस समाधान के बारे में पता है, लेकिन क्या यह करने का एकमात्र तरीका है? मैं दशमलव बिंदु प्रकार के समाधान द्वारा औचित्य की उम्मीद कर रहा था क्योंकि तालिका div को भरती है और मैं पैडिंग, मार्जिन इत्यादि के साथ मक नहीं करना चाहता ... – Gravy

+0

मुझे विश्वास है कि यह सबसे अच्छा है जिसे आप ढूंढने जा रहे हैं। यह मामूली में हैकी नहीं है, कोई पैडिंग या मार्जिन मैकिंग नहीं है। आप इसे सही गठबंधन करना चाहते हैं, एक सीएसएस घोषणा यह सब कुछ लेती है। –

+0

ठीक है ... हो सकता है कि मैंने जो उदाहरण दिया वह गलत था। मुझे लगता है कि मुझे खुद को स्पष्ट करने की जरूरत है। मुझे दशमलव बिंदु से औचित्य देने की आवश्यकता है क्योंकि मैं दशमलव स्थानों की सटीकता की गारंटी नहीं दे सकता। जैसे कुछ मूल्यों में 2 डीपी की सटीकता हो सकती है, कुछ 3 डीपी की शुद्धता हो सकती है। मेरा बुरा - मैं फिर से वाक्यांश प्रश्न दूंगा। यही कारण है कि मुझे दशमलव बिंदु से गठबंधन की आवश्यकता है। वास्तविक डेटा मुद्रा के लिए नहीं होगा। – Gravy

1

यह दो स्तंभों में मूल्य डालने के लिए स्वीकार्य होगा?

मान को स्ट्रिंग में परिवर्तित करने के लिए sprintf() का उपयोग करें, और उसके बाद बिट्स को बाएं कॉलम में दशमलव बिंदु (लेकिन दाएं संरेखित), और दूसरे कॉलम में दशमलव स्थान पर रखें।

http://jsfiddle.net/alnitak/p4BhB/ देखें, लेकिन जेएस बिट को अनदेखा करें ...

+0

एक jQuery प्लगइन के लिए नीचे दी गई मेरी पोस्ट देखें जो यह अविभाज्य रूप से करता है ... https://github.com/ndp/align-column – ndp

4

ऐसा करने का कोई सीधा तरीका नहीं है। एचटीएमएल 4.01 में align=char है, लेकिन बिना किसी ब्राउज़र समर्थन के। सीएसएस 2.0 में text-align संपत्ति का उपयोग करके समकक्ष था, समर्थन की समान कमी के साथ, इसलिए इसे सीएसएस 2.1 से हटा दिया गया था। CSS3 ड्राफ्ट्स के पास इस संरेखण के लिए एक अच्छी प्रणाली है, लेकिन अगर कोई (सही) कार्यान्वयन नहीं है तो spec से कटौती के खतरे में होने के रूप में इंगित किया गया है।

कामकाज के रूप में, आप कुछ अदृश्य (रिक्त) के साथ मूल्यों को दाएं-पैड कर सकते हैं ताकि जब दाएं दाएं ओर गठबंधन हो जाएं, तो दशमलव मार्कर गठबंधन हो जाएंगे। इसे प्राप्त करने का प्रयास करने के कई तरीके हैं:

1) अंक 0 का उपयोग करें, लेकिन उस पर एक शैली सेट करें, इसे अदृश्य बना दें, उदा।

123.4<span class=s>00</span> 

.s { visibility: hidden; } 

2) का प्रयोग करें आकार दूरी U + 2007 के साथ

, अंकों के रूप में एक ही चौड़ाई (जब अंक समान चौड़ाई के हैं), उदा के लिए परिभाषित किया गया

123.4&#x2007;&#x2007; 

इस काम के लिए, आपको फ़ॉन्ट सेट करने की आवश्यकता है ताकि इसमें यू + 2007 हो। http://www.fileformat.info/info/unicode/char/2007/fontsupport.htm के अनुसार भी एरियल में यह शामिल है, लेकिन मुझे डर है कि यह अभी भी उपयोग में आने वाले एरियल के पुराने संस्करणों पर लागू नहीं हो सकता है।

3) ch इकाई (अंक 0 की चौड़ाई रखने के लिए परिभाषित करें) का उपयोग करते हुए, नो-ब्रेक स्पेस का उपयोग करें और अंकों की वांछित संख्या में अपनी चौड़ाई सेट करें, हालांकि यह इकाई अपेक्षाकृत नई है और पुरानी ब्राउज़रों द्वारा समर्थित नहीं है । उदाहरण:

123.4<span class=d2>&nbsp;</span> 

साथ
.d2 { width: 2ch; display: inline-block; } 

मैं शायद पहली विधि का प्रयोग करेंगे। सिद्धांत के मामले में, यह कमी है कि जब सीएसएस बंद हो जाता है, तो डेटा में शून्य होती है, जो सटीकता के बारे में गलत जानकारी देती है, जबकि अन्य तरीकों से, सीएसएस को "केवल" लेआउट को ले जाता है।

(यह शायद स्पष्ट है कि अंक बराबर अग्रिम चौड़ाई का होना चाहिए, ताकि आप संख्यात्मक डेटा को संरेखित कर सकें। इसका मतलब यह है कि मानों के लिए उपयोग किए गए फ़ॉन्ट में उस संपत्ति होनी चाहिए। अधिकांश फ़ॉन्ट इस संबंध में करेंगे, लेकिन उदाहरण के लिए जॉर्जिया, कॉन्स्टेंटिया, और कॉर्बेल नहीं होंगे।)

3

मैंने एक jQuery प्लगइन लिखा जो इसे हल करता है। यह यहां पाया है: https://github.com/ndp/align-column

अपने कच्चे HTML तालिका का उपयोग करना, यह दशमलव अंक से एक स्तंभ संरेखित होगा:

$('table').alignColumn(3);

यह एक और स्तंभ जोड़कर इस करता है, लेकिन अपना सर्वश्रेष्ठ देता है भ्रष्ट अन्य नहीं करने के लिए रिक्ति। गिथब पेज पर एक अलग समाधान का भी संदर्भ है।

+1

कॉलम जोड़ना तालिका की संरचना को बदल देता है। इसका स्टाइल पर गंभीर प्रभाव हो सकता है (उदाहरण के लिए, यदि 'td: nth-child (...)' उपयोग किया गया है) और अभिगम्यता पर। –

+0

हां, निश्चित रूप से। लेकिन अधिकांश समाधान मार्कअप पर कुछ प्रभाव डालेगा। रेपो में एक अलग समाधान के लिंक हैं जो स्पैन का उपयोग करता है (मुझे विश्वास है)। – ndp

0

यह अधिक हो सकता है लेकिन मुझे एक ही चीज़ की आवश्यकता है और आउटपुट की लंबाई के साथ हल किया गया है और उस लंबाई के आधार पर सफेद जगह जोड़ना है।

आईई।:

if (strlen($meal_retail) == 5) { 
echo "&nbsp;&nbsp;&nbsp;&nbsp;"; 
} 
else (strlen($meal_retail) == 6) { 
    echo "&nbsp;&nbsp;"; 
} 

यह कर अतिरिक्त का एक सा के साथ सही ढंग से मेरी दशमलव खड़े, और मुझे यकीन है कि एक सरणी से ऊपर कोड को भी अच्छे से साफ कर सकता हूँ।

साथ ही, मैं अपने नंबर के साथ एडजस्ट करने अनुरूप किया गया है:

echo money_format('%i',$meal_retail) (makes it a two decimal money number) 

बस मेरे समाधान प्रदान करना चाहता था के रूप में मैं अपने खुद के संकल्प के साथ आने से पहले यह पेज देख रहा था।

0

यह मेरा समाधान है, उम्मीद है कि यह मदद करेगा !!

<style type="text/css"> 
td{ 
    font-family: arial; 
} 
.f{ 
    width: 10px; 
    color: white; 
    -moz-user-select: none; 
} 
</style> 

<table> 
<tr><td><span class="f">00</span>1.1<span class="f">00</span></td></tr> 
<tr><td><span class="f">0</span>12.34<span class="f">0</span></td></tr> 
<tr><td>123.456</td></tr> 
</table> 

इसके साथ, आप शून्य नहीं देख सकते हैं और उन्हें चुन नहीं सकते!

0

मैं इस के लिए जावास्क्रिप्ट का इस्तेमाल किया है, मुझे आशा है कि यह मदद मिलेगी .......

</tr> 
</table> 

</body> 
for(var i=0; i<numarray.length; i++){ 
    var n = numarray[i].toString(); 
    var res= n.split("."); 
    n = res[0]; 

    if(highetlen < n.length){ 
    highetlen = n.length; 
    } 

} 

for(var j=0; j<numarray.length; j++){ 
    var s = numarray[j].toString(); 
    var res= s.split("."); 
    s = res[0]; 

    if(highetlen > s.length){ 
    var finallevel = highetlen - s.length; 

    var finalhigh = ""; 
    for(k=0;k<finallevel;k++){ 
    finalhigh = finalhigh+ '&#160; '; 
    } 
    numarray[j] = finalhigh + numarray[j]; 
    } 
    var nadiss = document.getElementById("nadis"); 
    nadiss.innerHTML += "<tr><td>" + numarray[j] + "</td></tr>"; 
} 
संबंधित मुद्दे