-2

JavaでStringをDoubleに変換しようとしています。クライアントから次の文字列「1131.00」を取得しますが、Doubleに変換すると、1131.0が返されますが、これは正しくありません。私は1131.00(.00-2つのゼロを含む)を期待しています

_dPaymentAmt = ConvertUtil.stringToDouble(sPaymentAmt, 0.0);

public static double stringToDouble(String str, double dDefaultValue)
        throws Exception
        {
        double doubleValue = 0;

        try
            {
            doubleValue = Double.parseDouble(str);
            }
        catch (Exception e)
            {
            doubleValue = dDefaultValue;
            }

        return doubleValue;
        }

小数点以下2つのゼロを維持するにはどうすればよいですか?

編集:中間層の1つは、小数を削除して値を銀行に送信し、銀行はそれを100で割って小数を計算します。したがって、1311.0を送信すると、銀行手数料は131.10になります。したがって、小数点以下2桁を維持して、DOUBLE値として保持する必要があります。

4

8 に答える 8

11

double重要でない10進数は保持されません。それはただの大きさです-したがって、1131 == 1131.0==1131.00です。「1131.00」を1131.0に変換するのは正しいですそれはあなたが望むものではないかもしれませんが、それは正しいです。

常に小数点以下2桁の値(通貨など)を実際に格納しようとしている場合は、最初から使用doubleするべきではありません。BigDecimalセントの整数(または保存しているデータの種類)を使用または保存します。

動作を示すサンプルBigDecimal

import java.math.*;

public class Test {    

    public static void main (String[] args) throws Exception {
        BigDecimal bd = new BigDecimal("1311.00");
        System.out.println(bd); // 1311.00
    }
}

通貨の値を(または任意の種類の浮動2進数の)として格納することは、ほとんどの場合不適切であることに注意してください。double

上記が要件を満たしていない場合は、より多くのコンテキストを提供してください。

于 2013-03-01T17:02:22.537 に答える
5

doubleとを区別しません1131.0:変数1131.00に格納されているdouble場合、それらはまったく同じ数です。

数値をとして保持するStringsか、を使用することをお勧めしますBigDecimal

于 2013-03-01T17:01:41.823 に答える
2

を使用してjava.math.BigDecimal

String dblStr = "1131.00";
BigDecimal bd = new BigDecimal(dblStr);
System.out.println("BD is " + bd);
于 2013-03-01T17:04:32.840 に答える
1

これはすべてフォーマットです。doubleオブジェクトには、ゼロがいくつあるかについての参照は含まれていません。これはすべて、印刷方法です。数学では、1311.00は1311とまったく同じであるため、これらのゼロは関係ありません。ゼロを維持したい場合は、適切にフォーマットする必要があります。

于 2013-03-01T17:01:50.640 に答える
0

データ型に小数点以下2桁を保持するという期待はdouble意味がありません。数値を考慮する限り、1131.0と1131.00はまったく同じものであるため、doubleデータ型は値を1131.0のままにします。

小数点以下を保存する必要がある場合は、文字列のままにしてください。

于 2013-03-01T17:01:48.413 に答える
0

次のコードと同じくらい簡単です。

public void GetTwoDecimal(){

            double d = 2.34568;
            DecimalFormat f = new DecimalFormat("##.00");  // this will helps you to always keeps in two decimal places
            System.out.println(f.format(d)); 
    }

ソース

于 2013-03-01T17:05:39.983 に答える
0

このようにしてみてください:あなたの問題は解決されると確信しています。

import java.text.*;
public class Demo
{
  public static void main(String args[])
  {
    String str = "131.0000";   // keep as many zeroes 
    double d1 = Double.parseDouble(str);
    DecimalFormat df = new DecimalFormat("0.00");
    System.out.print(df.format(d1));
  }
}
于 2013-03-01T17:15:19.207 に答える
-1

フォーマットを作成します(たとえば、format.money( "$ 0.00"))。Javaには、おそらくお金を処理するための組み込みフォーマットがあります。小数点以下2桁が必要な場合は、マネー形式を使用してください。

于 2013-03-01T17:06:49.487 に答える