Matti Mäkitalo: Dezimalzahlen kommabündig ausrichten (z,B. in table)

Beitrag lesen

Hi,

.vorkomma  { display: inline-block; text-align: right; width: 3em }

.nachkomma { display: inline-block; text-align: left;  width: 1em }


> Okay. per CSS als Blockelement umformen.  
> Dann bleibt es auf HTML-Ebene auch bestimmt ein inline-Element und sltellt keine Barriere dar?  
> Stimmt das?  
  
Sieht so aus.  
  
Ein anderer Vorschlag ins Blaue reingedacht:  
man könnte per Javascript die span-Elemente einfügen, so hat man zumindest beim Editieren nicht die Notwendigkeit, da tätig zu werden.  
  
Beispiel:  
~~~html
<!DOCTYPE html>  
<html>  
	<head>  
		<meta charset='UTF-8' />  
		<title>Tabelle: Kommazahlen komma-bündig ausrichten</title>  
		<script src="http://code.jquery.com/jquery-1.4.4.js" type="text/javascript"></script>  
		<style type="text/css">  
			td, th {  
				border: 1px solid black;  
				text-align:right;  
			}  
			.digit {  
				width: 0.6em;  
				display: inline-block;  
				text-align:left;  
			}  
		</style>  
  
	</head>  
	<body>  
		<table>  
			<thead>  
				<tr>  
					<th>Spalte 1</th>  
					<th class='numeric'>Spalte 2</th>  
					<th class='numeric'>Spalte 3</th>  
				</tr>  
			</thead>  
			<tbody>  
				<tr>  
					<td>Zeile 0</td>  
					<td>10,1</td>  
					<td>0,2</td>  
				</tr>  
				<tr>  
					<td>Zeile 1</td>  
					<td>0,12</td>  
					<td>0,2</td>  
				</tr>  
				<tr>  
					<td>Zeile 2</td>  
					<td>0,3</td>  
					<td>12,36</td>  
				</tr>  
				<tr>  
					<td>Zeile 3</td>  
					<td>0,45</td>  
					<td>8,45</td>  
				</tr>  
				<tr>  
					<td>Zeile 4</td>  
					<td>0,1</td>  
					<td>123,1</td>  
				</tr>  
				<tr>  
					<td>Zeile 5</td>  
					<td>12</td>  
					<td>0.2</td>  
				</tr>  
			</tbody>  
		</table>  
	</body>  
	<script type="text/javascript">  
		$(function() {  
			var after_dec_digits = 2;  
			// get all numeric columns  
			$('th.numeric').each(function() {  
				var columnIndex = this.cellIndex;  
				$(this).parent().parent().parent() // table-element  
					.find('td:nth-child(' + (columnIndex+1) + ')')  
					.each(function(rowIndex, node) {  
						var value = Number($(node).text().replace(/,/, '.')).toFixed(after_dec_digits);  
						var digits = value.split("");  
						var length = digits.length;  
						var new_text = '';  
						//alert("rowIndex=" + rowIndex + ", val=" + $(node).text() + ", l=" + digits.length);  
						for (var i = 0; i < length; ++i) {  
							if (i == length - after_dec_digits - 1) { // no 'digit' class for the decimal point  
								// for ',' instead of '.', exchange value here  
								new_text += digits[i];  
							} else {  
								new_text += '<span class="digit">' + digits[i] + '</span>';  
							}  
						}  
						$(node).html(new_text);  
					});  
			});  
		});  
	</script>  
</html>  

Hier trenne ich die Zahlen pro Ziffer. So kann ich auch mit nicht-dicktengleichen Schriftarten eine bündige Darstellung der Ziffern gewährleisten.

Bis die Tage,
Matti