打印小数点前的位数

时间:2012-03-27 14:08:23

标签: java eclipse

我知道有一些方法可以获得小数点后的位数,例如substring方法,但是我如何才能对小数位前的位数进行此操作?

我需要用它来将美国变化(双倍)转换为欧元变化(双倍)。我想这样做的方法是将小数点前的数字(例如$ 1。)乘以等价的欧元(.7498),取小数后的数字(.16),乘以小数。 01欧元硬币值(.0075),将两个值加在一起得到相当于$ 1.16(.8698)的欧元。

4 个答案:

答案 0 :(得分:7)

要获取小数点前的数字,请执行以下操作:

String str = new Double(your_double_number).toString().subString(0,str.indexOf('.'));
double v = Double.valueOf(str);

如果您使用'$'符号,则取1代替0。

希望它会对你有所帮助。

答案 1 :(得分:2)

  

将美国变化(双倍)转换为欧元变化(双倍)

请不要那样做。 Never, never, ever使用doublefloat代表资金,因为这些数据类型为cannot represent most decimal fractions,因此您在开始进行任何计算之前都会出现舍入错误。

相反,请使用BigDecimal

答案 2 :(得分:1)

首先 - 只要将美元价值乘以汇率就可以得到欧元价值,所以就我所见,没有必要这样做 - 你只会引入舍入错误。

但如果你确实需要 - 只需使用子串

String dollarVal = "$1.16"
String justFullDollar = dollarVal.substring(1, dollarVal.indexOf("."));
String justCents = dollarVal.substring(dollarVal.indexOf(".")+1);

正确的方法是将所有钱存储为整数或任意精度对象,这样你也不会出现浮点错误。

转换为美分,再乘以转换回来。 e.g。

String dollarVal = "$1.16"
BigDecimal dollars = new BigDecimal(dollarVal.substring(1)); //1.16
BigDecimal cents = dollars.multiply(new BigDecimal(100)); //116
BigDecimal eurocents = cents.multiply(new BigDecimal(exchangeRate)); //86.9768
BigDecimal euros = eurocents.divide(new BigDecimal(100)); //0.869768
DecimalFormat formatter = new DecimalFormat("###.00");
String euroVal = "€" + formatter.format(euros);

答案 3 :(得分:0)

您可以使用

String s[] = new Double(your number).toString().split(".");

s [0] 是小数点前的数字。 s [1] 是小数点后的数字。

两者都在String中,因此您需要使用

将它们解析为double
double num1 = Double.parseDouble(s[0]);
double num2 = Double.parseDouble(s[1]);