我已经开始了在线课程“完整的Android N开发人员课程”,并且在某个部分中我对自己的代码有疑问,并且社区确实没有太多帮助。
我一直在尝试在线查看问题,并向课程社区问答提问。
public void convert(View view){
editText dollarAmounteditText = (editText) findViewById(R.id.dollarAmounteditText);
Double dollarAmountDouble = Double.parseDouble(dollarAmounteditText);
Double poundAmount = dollarAmountDouble = 0.75;
Toast.makeText(mainActivity.this, "£" + String.format("%.2f", poundAmount ), Toast.LENGTH_SHORT).show();
Log.i("amount" , dollarAmounteditText.getText().toString());
}
每当我尝试运行模拟器时,我也会收到此错误消息。
“ M仿真器:仿真器:错误:x86仿真当前需要硬件加速!”
答案 0 :(得分:1)
切勿将double或BigDecimal用作货币;两者都荒谬。
您应始终标识货币的适当小数部分作为单位,并使用长整数来表示。 例如, 如果您使用美元, 那么一分钱(1/100美元的汇率)可能不错。 如果您要在货币之间进行转换, 那么1 / 10_000的基础货币(例如USD)可能是合理的。 在1 / 10_000基础货币的情况下, 在我的示例中,将以1美元(1美元)的价格存储10_000。 为1日元兑换1日元,您可能希望使用1 / 10_000_000美元作为1值(即以1美元的价格存储10_000_000)。
一旦您有合理的代表权, 对货币进行整数数学运算(长整数表示整数值)。
运行此命令以查看为什么double和BigDecimal不好。
import java.math.BigDecimal;
import org.junit.Test;
public class GoofballsUseDouble
{
public void bigdecimalTest1()
{
final BigDecimal m1 = new BigDecimal(
0.1d);
final BigDecimal m2 = new BigDecimal(
0.2d);
final BigDecimal sum;
sum = m1.add(m2);
System.out.println("");
System.out.println("bigdecimalTest1");
System.out.println(" v1.a (0.1bd): " + m1);
System.out.println(" v2.a (0.2bd): " + m2);
System.out.println("sum.a (?): " + sum);
}
public void bigdecimalTest2()
{
final BigDecimal m1 = new BigDecimal(
"0.1");
final BigDecimal m2 = new BigDecimal(
"0.2");
final BigDecimal sum;
sum = m1.add(m2);
System.out.println("");
System.out.println("bigdecimalTest2");
System.out.println(" v1.a (0.1bds): " + m1);
System.out.println(" v2.a (0.2bds): " + m2);
System.out.println("sum.a (?): " + sum);
}
public void doubleTest()
{
final double m1 = 0.1d;
final double m2 = 0.2d;
final double sumM;
sumM = m1 + m2;
System.out.println("");
System.out.println("doubleTest");
System.out.println(" v1.a (0.1d): " + m1);
System.out.println(" v2.a (0.2d): " + m2);
System.out.println("sum.a (?): " + sumM);
System.out.printf(" v1.b (0.1d): %f%n",
m1);
System.out.printf(" v2.b (0.2d): %f%n",
m2);
if (.3d == sumM)
{
System.out.println("it r equalz");
}
else
{
System.out.println("double is not exact, of course");
}
}
@Test
public void theTest()
{
doubleTest();
bigdecimalTest1();
bigdecimalTest2();
}
}