在Java中应该使用什么数据类型来表示钱?
当前回答
BigDecimal可以使用,为什么不使用Float或Double可以在这里看到:为什么不使用Double或Float来表示货币?
其他回答
我会用Joda Money
它仍然是0.6版本,但看起来很有前途
您可以使用Money and Currency API (JSR 354)。只要向项目添加适当的依赖项,就可以在中使用此API。
对于Java 8,将以下参考实现作为依赖项添加到pom.xml中:
<dependency>
<groupId>org.javamoney</groupId>
<artifactId>moneta</artifactId>
<version>1.0</version>
</dependency>
此依赖项将传递地添加javax。Money:作为依赖项的Money -api。
然后你可以使用API:
package com.example.money;
import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.is;
import java.util.Locale;
import javax.money.Monetary;
import javax.money.MonetaryAmount;
import javax.money.MonetaryRounding;
import javax.money.format.MonetaryAmountFormat;
import javax.money.format.MonetaryFormats;
import org.junit.Test;
public class MoneyTest {
@Test
public void testMoneyApi() {
MonetaryAmount eurAmount1 = Monetary.getDefaultAmountFactory().setNumber(1.1111).setCurrency("EUR").create();
MonetaryAmount eurAmount2 = Monetary.getDefaultAmountFactory().setNumber(1.1141).setCurrency("EUR").create();
MonetaryAmount eurAmount3 = eurAmount1.add(eurAmount2);
assertThat(eurAmount3.toString(), is("EUR 2.2252"));
MonetaryRounding defaultRounding = Monetary.getDefaultRounding();
MonetaryAmount eurAmount4 = eurAmount3.with(defaultRounding);
assertThat(eurAmount4.toString(), is("EUR 2.23"));
MonetaryAmountFormat germanFormat = MonetaryFormats.getAmountFormat(Locale.GERMAN);
assertThat(germanFormat.format(eurAmount4), is("EUR 2,23") );
}
}
BigDecimal可以使用,为什么不使用Float或Double可以在这里看到:为什么不使用Double或Float来表示货币?
表示可能的最小值的整型。换句话说,你的程序应该以美分为单位,而不是美元/欧元。
这应该不会阻止gui将其转换回美元/欧元。
您应该使用BigDecimal来表示货币值。它允许您使用各种舍入模式,并在 金融应用中,舍入模式往往是一个硬性要求 这甚至可能是法律规定的。
推荐文章
- RabbitMQ与通道和连接之间的关系
- buildSessionFactory()配置方法在Hibernate中已弃用?
- Spring MVC -如何获得所有的请求参数在一个地图在Spring控制器?
- 如何在Java中按两个字段排序?
- 文件之间的差异。路径中的分隔符和斜杠
- time_t最终的类型定义是什么?
- 在方法参数中使用NotNull注释
- Spring MVC中处理可选参数的@RequestParam
- Tomcat:如何查找正在运行的Tomcat版本?
- “java”、“javaw”和“javaws”之间有什么区别?
- 将Date对象转换为日历对象
- 在Java中保存最后N个元素的大小有限的队列
- 如何运行一个类从Jar不是主类在其清单文件
- 使arrayList.toArray()返回更具体的类型
- 在Eclipse中粘贴多行Java字符串