Re: How would you get rid of lagging zeros?
Ramon F Herrera wrote:
The numbers in question are the possible widths of a screw, in inches:
- 1
- 1.125
- 1.25
- 1.375
- 1.5
- 1.75
- 2
- 2.25
(those are the only possible widths).
Those can be modeled as class instances, e.g., Double() or an enum. Enums can
have a custom 'toString()' and static 'fromString()' method - such a useful
idea I built it into my Eclipse and NetBeans code templates.
I do not even make any calculation with those values, they are only
used as a key to several Maps. All I need is the values to be
different and to have a canonical form for each. I could use these
"values" as keys:
- "one inch"
- "one inch and a quarter"
etc.
<untested>
/* ScrewSize
* $RCSfile$
*/
package com.lewscanon.util;
import java.util.Collections;
import java.util.SortedMap;
import java.util.TreeMap;
/** ScrewSize.
* 1, 1.125, 1.25, 1.375, 1.5, 1.75, 2, 2.25
*/
public enum ScrewSize
{
ONE_INCH( 1.0, "one inch inches" ),
ONE_AND_ONE_EIGHTH( 1.125, "one inch and an eighth" ),
ONE_AND_ONE_QUARTER( 1.25, "one inch and a quarter" ),
ONE_AND_THREE_EIGHTHS( 1.375, "one and three eighths inches" ),
ONE_AND_ONE_HALF( 1.5, "one and a half inches" ),
ONE_AND_THREE_QUARTERS( 1.75, "one and three quarters inches" ),
TWO_INCHES( 2.0, "two inches" ),
TWO_AND_ONE_QUARTER( 2.25, "two and one quarter inches" ),
;
private static final long serialVersionUID = 1L;
private final Double ssize;
private final String repr;
/**
* Constructor - package-private.
* @param ssiz Double ssize.
* @param rep String representation of enum value.
*/
ScrewSize( Double ssiz, String rep )
{
this.ssize = ssiz;
this.repr = rep;
}
/**
* Get the {@code Double} ssize.
* @return Double ssize.
*/
public Double getSsize()
{
return this.ssize;
}
/**
* Get the {@code String} representation.
* @return String representation.
*/
@Override
public String toString()
{
return this.repr;
}
/**
* Look up enum constant from String representation.
* @param rep String representation of enum value.
* @return ScrewSize constant matching the representation.
*/
public static ScrewSize fromString( final String rep )
{
if ( rep == null )
{
return null;
}
for ( ScrewSize val : values() )
{
if ( rep.equals( val.toString() ) )
{
return val;
}
}
return valueOf( rep );
}
/**
* Look up enum constant from {@code Double} ssize.
* @param ssiz Double ssize.
* @return ScrewSize constant matching the ssize.
*/
public static ScrewSize fromSsize( final Double ssiz )
{
if ( ssiz == null )
{
return null;
}
return Holder.ssizes.get( ssiz );
}
private static class Holder
{
private Holder(){}
static final SortedMap <Double, ScrewSize> ssizes;
static
{
SortedMap< Double, ScrewSize> sszs =
new TreeMap <Double, ScrewSize> ();
for ( ScrewSize sz : ScrewSize.values() )
{
sszs.put( sz.getSsize(), sz );
}
ssizes = Collections.unmodifiableSortedMap( sszs );
}
}
}
</untested>
--
Lew