1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2011 Association for Decentralized Information Management in
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.utils.format;
\r
14 import java.text.DecimalFormat;
\r
15 import java.text.DecimalFormatSymbols;
\r
16 import java.text.Format;
\r
17 import java.text.NumberFormat;
\r
18 import java.util.Locale;
\r
23 * @author toni.kalajainen
\r
25 public enum ValueFormat {
\r
27 Currency ( new DecimalFormat("#,##0.#######;-#,##0.#####", Impl.SYMBOLS) ),
\r
28 Scientific( new DecimalFormat("0.###E0", Impl.SYMBOLS) ),
\r
29 Engineering( new DecimalFormat("##0.###E0", Impl.SYMBOLS) ),
\r
30 Default ( new SwitchFormat(1e-5, 1e5, Scientific.format, Currency.format, Scientific.format) );
\r
32 public final NumberFormat format;
\r
33 ValueFormat(NumberFormat format) { this.format = format; };
\r
35 public Format toFormat( int noOfDecimals )
\r
38 case Currency: return noOfDecimals>decimalFormats.length||noOfDecimals<0 ? decimalFormats[decimalFormats.length-1] : decimalFormats[noOfDecimals];
\r
39 case Scientific: return format;
\r
40 case Engineering: return format;
\r
41 case Default: return noOfDecimals>defaultFormats.length||noOfDecimals<0 ? defaultFormats[defaultFormats.length-1] : defaultFormats[noOfDecimals];
\r
42 default: return format;
\r
46 public static void main(String[] args) {
\r
47 double value = 1234567.8901234567890123456;
\r
48 for (int i=0; i<10; i++) {
\r
49 System.out.println("value="+value+", decimalformat["+i+"]="+decimalFormats[i].format(value));
\r
51 value = 567.8901234567890123456;
\r
52 for (int i=0; i<10; i++) {
\r
53 System.out.println("value="+value+", decimalformat["+i+"]="+decimalFormats[i].format(value));
\r
57 private static DecimalFormat decimalFormats[] = new DecimalFormat[17];
\r
58 private static Format defaultFormats[] = new Format[17];
\r
61 String decimals = "";
\r
62 for ( int i=0; i<decimalFormats.length; i++ ) {
\r
63 decimalFormats[i] = new DecimalFormat("#,###"+decimals+";-#,###"+decimals, Impl.SYMBOLS);
\r
64 defaultFormats[i] = new SwitchFormat(1e-5, 1e5, Scientific.format, decimalFormats[i], Scientific.format);
\r
65 if ( i==0 ) decimals += ".";
\r
70 private static class Impl {
\r
71 private static final DecimalFormatSymbols SYMBOLS;
\r
73 SYMBOLS = DecimalFormatSymbols.getInstance(Locale.US);
\r
74 SYMBOLS.setGroupingSeparator(' ');
\r