]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.utils/src/org/simantics/utils/format/ValueFormat.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.utils / src / org / simantics / utils / format / ValueFormat.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2011 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\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
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.utils.format;\r
13 \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
19 \r
20 \r
21 /**\r
22  * \r
23  * @author toni.kalajainen\r
24  */\r
25 public enum ValueFormat {\r
26         \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
31 \r
32         public final NumberFormat format;\r
33         ValueFormat(NumberFormat format) { this.format = format; };\r
34         \r
35         public Format toFormat( int noOfDecimals ) \r
36         {\r
37                 switch ( this ) {\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
43                 }\r
44         }\r
45         \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
50                 }\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
54                 }\r
55         }\r
56         \r
57         private static DecimalFormat decimalFormats[] = new DecimalFormat[17];\r
58         private static Format defaultFormats[] = new Format[17];\r
59         \r
60         static {\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
66                         decimals += "#";\r
67                 }\r
68         }\r
69 \r
70         private static class Impl {\r
71                 private static final DecimalFormatSymbols SYMBOLS;\r
72                 static {\r
73                         SYMBOLS = DecimalFormatSymbols.getInstance(Locale.US);\r
74                         SYMBOLS.setGroupingSeparator(' ');\r
75                 }\r
76         }\r
77 \r
78 }\r