Converts the double value to locale-independent string representation. - Java java.lang

Java examples for java.lang:String End

Description

Converts the double value to locale-independent string representation.

Demo Code

/*******************************************************************************
 * Copyright (c) 2004 Actuate Corporation.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors://from w  ww. ja  v a  2 s .co m
 *  Actuate Corporation  - initial API and implementation
 ****
//package com.java2s;

public class Main {
    public static void main(String[] argv) {
        double d = 42.45678;
        int fNumber = 42;
        System.out.println(doubleToString(d, fNumber));
    }

    /**
     * Converts the double value to locale-independent string representation.
     * This method works like <code>Double.toString( double )</code>, and can
     * also handle very large number like 1.234567890E16 to "12345678900000000".
     * 
     * @param d
     *            the double value to convert
     * @param fNumber
     *            the positive maximum fractional number
     * @return the locale-independent string representation.
     */

    public static String doubleToString(double d, int fNumber) {

        if (fNumber < 0)
            fNumber = 0;

        String value = Double.toString(d);
        int ePos = value.indexOf('E');
        int dotPos = value.indexOf('.');

        // Convert the double like "1234567890000000.56789" to string, which
        // will be converted to
        // "1.23456789000E15" by Double.toString().

        if (ePos != -1) {
            // Get the exponent of this double

            String e = value.substring(ePos + 1);
            int exp = Integer.parseInt(e);

            // Move the dot position according to the exponent

            StringBuffer sb = new StringBuffer(value.substring(0, dotPos));
            if (ePos - dotPos - 1 > exp) {
                // "1.23456789000E4"

                sb.append(value.substring(dotPos + 1, dotPos + 1 + exp));
                sb.append('.');
                sb.append(value.substring(dotPos + 1 + exp, ePos));

                // "12345.6789000"
            } else {
                // "1.23400E8"

                sb.append(value.substring(dotPos + 1, ePos));
                for (int i = 0; i < exp - (ePos - dotPos - 1); i++)
                    sb.append('0');

                // "123400000"
            }

            // "1234567890000000" will be the final one

            value = sb.toString();
        }

        // Limit the fractional number to maximum fractional number

        int pos = value.indexOf('.');
        if (pos != -1) {
            if (value.length() - pos - 1 > fNumber)
                value = value.substring(0, pos + fNumber + 1);

            // Remove the ending '0'.

            int i = 0;
            for (; i < fNumber; i++) {
                if (value.charAt(value.length() - i - 1) != '0')
                    break;
            }
            value = value.substring(0, value.length() - i);

            // Remove the last dot

            if (value.charAt(value.length() - 1) == '.')
                value = value.substring(0, value.length() - 1);
        }

        return value;
    }
}

Related Tutorials