java - 从 String 转换为 BigDecimal 以对货币进行数学计算

标签 java android string currency bigdecimal

我正在从事一个项目,该项目需要对货币执行一些简单的数学运算,但它以字符串的形式出现。我是 Java/Android 的新手,所以我正在寻求帮助将 String 转换为适合此操作的数据类型。起初我认为 Float 是正确的,但在阅读其他地方并将自己介绍给数字类后,BigDecimal 似乎是正确的。我在正确的轨道上吗?此时我只想从初始发票金额中减去付款总额。我觉得这段代码很简单但很笨拙,我怀疑我错过了很多关于使用货币的细微差别。你会怎么做?热烈感谢所有建议!

    // capture variables from sending activity
    String invoiceAmt = getIntent().getStringExtra("invoiceAmt");
    String paymentsSum = getIntent().getStringExtra("paymentsSum");

    // convert strings to BigD's 
    BigDecimal amt = new BigDecimal(invoiceAmt);
    BigDecimal sum = new BigDecimal(paymentsSum);

    // Do the math
    BigDecimal invDue = amt.subtract(sum);

    // insert the value (back to string) into textView
    TextView tvInvoiceDue = (TextView)findViewById(R.id.InvoiceDue);
    tvInvoiceDue.setText(invDue.toString());

最佳答案

BigDecimal 是一种很好的方法。使用 intlong 来存储美分也是如此。我听说有些人喜欢 Joda-Money但我自己从未使用过它。

参见 this question .

在您发布的代码中,确保您收到的 String 中没有货币符号。

关于java - 从 String 转换为 BigDecimal 以对货币进行数学计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4973079/

相关文章:

java 数据输出流 getOutputStream() getInputStream()

java - java中无法将字符串转换为int

java - 更新后只下载文件?

string - Windows gc 替换显示\n 而不是新行

c++ - 更喜欢迭代器而不是指针?

Java String.replace() - 替换的不仅仅是我指定的子字符串?

java - 用java获取一个进程的输出结果

Android FusedLocationProviderApi : Incoming intent has no LocationResult or LocationAvailability

android - 混淆的 Android 库上的 java.lang.VerifyError

android - 在 2 台 PC 上工作时应用程序未安装