标签: bigdecimal

Java JaxB生成,如何从我的xsd获取bigDecimal?

我有一个xsd注释,我试图让Marshal成为一个java对象.我希望java最终得到BigDecimal的价值.我在xsd中输入什么才能使它成功?我正在使用xjc ant任务

<xjc schema="my.xsd" destdir="generated" header="false" extension="true" />
Run Code Online (Sandbox Code Playgroud)

这是相关的xsd -

<complexType name="Size">
    <attribute name="height" type="BigDecimal"></attribute> <!-- this is wrong-->
</complexType>
Run Code Online (Sandbox Code Playgroud)

我想为生成的类最终得到这个 -

public class Size { 
@XmlAttribute(name = "height")
    protected BigDecimal height;
}
Run Code Online (Sandbox Code Playgroud)

java xml xsd jaxb bigdecimal

8
推荐指数
1
解决办法
7075
查看次数

Java格式BigDecimal数字,带逗号和2位小数

我想用逗号和2个小数点格式化BigDecimal数字.例如

Amount is: 5.0001 and formatted to: 5.00
Amount is: 999999999.999999 and formatted to: 999,999,999.99
Amount is: 1000.4999 and formatted to: 1,000.49
Amount is: 9999.089 and formatted to: 9,999.08
Amount is: 0.19999 and formatted to: 0.19
Amount is: 123456.99999999 and formatted to: 123,456.99
Run Code Online (Sandbox Code Playgroud)

java bigdecimal

8
推荐指数
1
解决办法
1万
查看次数

在Java中以美分(整数)转换美元(大十进制)的最佳方法是什么?

我必须将我的Web应用程序与支付网关集成.我想以美元输入总金额,然后将其转换为美分,因为我的支付网关库接受的数量为Cents(类型Integer).我发现Big Decimal在java中操纵货币是最好的方法.目前我接受输入为50美元并将其转换为Integer如下:

BigDecimal rounded = amount.setScale(2, BigDecimal.ROUND_CEILING);
BigDecimal bigDecimalInCents = rounded.multiply(new BigDecimal("100.00"));
Integer amountInCents = bigDecimalInCents.intValue();
Run Code Online (Sandbox Code Playgroud)

这是将美元转换为美分的正确方法还是应该以其他方式实现?

java integer type-conversion bigdecimal

8
推荐指数
1
解决办法
5088
查看次数

BigDecimal减法

我想减去2个double值,我尝试了以下代码.

double val1 = 2.0;
double val2 = 1.10;

System.out.println(val1 - val2);
Run Code Online (Sandbox Code Playgroud)

我得到了输出,

0.8999999999999999
Run Code Online (Sandbox Code Playgroud)

为了获得输出,0.9我尝试BigDecimal如下,

BigDecimal val1BD = new BigDecimal(val1);
BigDecimal val2BD = new BigDecimal(val2);

System.out.println(val1BD.subtract(val2BD));
Run Code Online (Sandbox Code Playgroud)

我得到了输出,

0.899999999999999911182158029987476766109466552734375
Run Code Online (Sandbox Code Playgroud)

然后我尝试了 BigDecimal.valueOf()

val1BD = BigDecimal.valueOf(val1);
val2BD = BigDecimal.valueOf(val2);

System.out.println(val1BD.subtract(val2BD));
Run Code Online (Sandbox Code Playgroud)

最后我得到了输出0.9.

我的问题是案例2和案例3有什么区别?

在案例2中为什么我得到这样的输出?

java bigdecimal

8
推荐指数
1
解决办法
1万
查看次数

8
推荐指数
1
解决办法
2万
查看次数

可选和同时铸造

如果不是,我有一个BigDecimal我想要投射的金额,但我做了一个例外:Longnulljava.lang.NullPointerException

BigDecimal bgAmount = getAmount();

long totalSupplyFilterMin = 
              Optional.ofNullable(bgAmount.longValue()).orElse(Long.MIN_VALUE);
Run Code Online (Sandbox Code Playgroud)

java bigdecimal optional java-8

8
推荐指数
2
解决办法
103
查看次数

Java中的BigDecimal

我正在考虑使用BigDecimal比较两个四舍五入到两位数的货币值.例如,我希望以下产生0,因为我正在比较应该舍入到0.02的东西和0.02.但它产生-1 !! 有没有正确的方法来做到这一点?

这也适用于较大的数字,如123.45 vs 123.4534 ...当使用"compareTo"时应该产生0.

我尝试过使用数学上下文,但它看起来并不优雅......有正确的方法吗?

BigDecimal spread = new BigDecimal(0.01934);
spread.setScale(2, RoundingMode.HALF_EVEN);
System.out.format("0.0193 ? 0.02 = %d\n", spread.compareTo(new BigDecimal(0.02)));
Run Code Online (Sandbox Code Playgroud)

解决方案是:

BigDecimal spread = new BigDecimal(0.01934).setScale(2, RoundingMode.HALF_EVEN);
BigDecimal loSpread = new BigDecimal(0.02).setScale(2, RoundingMode.HALF_EVEN);
System.out.format("0.0193 ? 0.02 = %d\n", spread.compareTo(loSpread));
Run Code Online (Sandbox Code Playgroud)

java bigdecimal

7
推荐指数
2
解决办法
737
查看次数

java BigDecimal子句失败

我尝试了以下代码.但是使用BigDecimal减去时会得到不同的结果.

    double d1 = 0.1;
    double d2 = 0.1;
    System.out.println("double result: "+ (d2-d1));

    float f1 = 0.1F;
    float f2 = 0.1F;
    System.out.println("float result: "+ (f2-f1));

    BigDecimal b1 = new BigDecimal(0.01);
    BigDecimal b2 = new BigDecimal(0.01);

    b1 = b1.subtract(b2);
    System.out.println("BigDecimal result: "+ b1);
Run Code Online (Sandbox Code Playgroud)

结果:

double result: 0.0
float result: 0.0
BigDecimal result: 0E-59
Run Code Online (Sandbox Code Playgroud)

我还在努力.任何人都可以澄清.

java bigdecimal

7
推荐指数
3
解决办法
9727
查看次数

当我使用BigDecimal时,为什么我的操作不起作用?

我正在尝试使用BigDecimal它,但它总是返回0.我使用时为什么会这样double

public static void main(String[] args) {
    double a = 3376.88;
    BigDecimal b = new BigDecimal(a);
    System.out.println(a-a/1.05);
    System.out.println(b.subtract(b).divide(new BigDecimal(1.05)).doubleValue());
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

java bigdecimal

7
推荐指数
2
解决办法
1474
查看次数

使用ROUND_HALF_UP的BigDecimal 1.0E + 8/100000000为0

有人可以解释为什么第一行的结果为0?

System.out.println((new BigDecimal("1.0E+8")).divide(new BigDecimal(100000000), BigDecimal.ROUND_HALF_UP));
System.out.println((new BigDecimal("1.0E+8")).subtract(BigDecimal.ONE).divide(new BigDecimal(100000000), BigDecimal.ROUND_HALF_UP));

0E+7
1
Run Code Online (Sandbox Code Playgroud)

java rounding bigdecimal divide

7
推荐指数
1
解决办法
1117
查看次数

标签 统计

bigdecimal ×10

java ×10

divide ×1

integer ×1

java-8 ×1

jaxb ×1

optional ×1

rounding ×1

string ×1

type-conversion ×1

xml ×1

xsd ×1