我知道有一些方法可以获得小数点后的位数,例如substring方法,但是我如何才能对小数位前的位数进行此操作?
我需要用它来将美国变化(双倍)转换为欧元变化(双倍)。我想这样做的方法是将小数点前的数字(例如$ 1。)乘以等价的欧元(.7498),取小数后的数字(.16),乘以小数。 01欧元硬币值(.0075),将两个值加在一起得到相当于$ 1.16(.8698)的欧元。
答案 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使用double
或float
代表资金,因为这些数据类型为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中,因此您需要使用
将它们解析为doubledouble num1 = Double.parseDouble(s[0]);
double num2 = Double.parseDouble(s[1]);