标签: bigdecimal

BigDecimal表示法eclipse插件或漂亮的外部工具

我需要使用BigDecimal进行大量操作,我发现必须表达

Double a = b - c * d; //natural way
Run Code Online (Sandbox Code Playgroud)

BigDecimal a = b.subtract(c.multiply(d))//BigDecimal way
Run Code Online (Sandbox Code Playgroud)

不仅丑陋,而且是我和业务分析师之间的错误和沟通问题的根源.他们完全能够用双打读取代码,但现在他们不能.

当然一个完美的解决方案将是java支持运算符重载,但由于这不会发生,我正在寻找一个eclipse插件甚至是一个外部工具,可以从"自然方式"自动转换为"bigdecimal方式".

不是试图预处理源代码或动态翻译或任何复杂的事情,我只是想要一些我可以输入文本和获取文本,并在源代码中保持"自然方式"作为注释.

PS:我发现这个令人难以置信的智能黑客,但我不想开始进行字节码操作.也许我可以用它来创建一个Natural2BigDecimal翻译器,但如果有人已经做过这样的工具,我不想重新发明轮子.

我不想切换到Scala/Groovy/JavaScript,我也不能,公司规则禁止在服务器端代码中使用java.

java eclipse plugins bigdecimal

10
推荐指数
1
解决办法
572
查看次数

在Java中比较BigDecimal和int

哪一个是比较Java中BigDecimal和int的最佳方法:将BigDecimal转换为int或将int转换为BigDecimal?

java int comparison bigdecimal

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

浮点数最多2位小数java

我试图将浮点数舍入到2位小数.

我有2个浮动值:

1.985
29.294998
Run Code Online (Sandbox Code Playgroud)

它们都需要四舍五入,所以我最终得到以下内容:

1.99
29.30
Run Code Online (Sandbox Code Playgroud)

当我使用以下方法时:

public static Float precision(int decimalPlace, Float d) {

    BigDecimal bd = new BigDecimal(Float.toString(d));
    bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
    return bd.floatValue();
  }
Run Code Online (Sandbox Code Playgroud)

结果是:

1.99
29.29
Run Code Online (Sandbox Code Playgroud)

java floating-point decimal rounding bigdecimal

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

如何以与比例无关的方式检查BigDecimal是否在Set或Map中?

BigDecimal的equals()方法也比较比例,所以

new BigDecimal("0.2").equals(new BigDecimal("0.20")) // false
Run Code Online (Sandbox Code Playgroud)

有人质疑它为何如此行事.

现在,假设我有一个Set<BigDecimal>,如何检查0.2是否在该集合中,是否独立?

Set<BigDecimal> set = new HashSet<>();
set.add(new BigDecimal("0.20"));
...
if (set.contains(new BigDecimal("0.2")) { // Returns false, but should return true
    ...
}
Run Code Online (Sandbox Code Playgroud)

java bigdecimal

10
推荐指数
1
解决办法
1844
查看次数

如何做BigDecimal模数比较

我对如何写一个简单的模数比较if语句感到困惑.我基本上只想检查当x是BigDecimal时x是20的倍数.谢谢!

java bigdecimal

10
推荐指数
2
解决办法
8265
查看次数

为什么这个奇怪的输出有truncate和BigDecimal?

我正在调用truncate方法来截断double值,以便在十进制之后应该有一个数字(没有四舍五入),
For Ex.truncate(123.48574) = 123.4.

我的截断方法是这样的

public double truncate (double x) {
    long y = (long) (x * 10);
    double z = (double) (y / 10);
    return z;
}
Run Code Online (Sandbox Code Playgroud)

除了这个奇怪的输出外,几乎所有的值都能正常工作.

double d = 0.787456;
d = truncate(d + 0.1); //gives 0.8 as expected. Okay.
Run Code Online (Sandbox Code Playgroud)

但,

double d = 0.7;
d = truncate(d + 0.1); //should also give 0.8. But its giving 0.7 only. 
                       //Strange I don't know why?
Run Code Online (Sandbox Code Playgroud)

事实上它适用于所有其他0.1,0.2,0.3,0.4,0.5,0.6, - ,0.8,0.9
我的意思,例如,

double d = 0.8;
d = …
Run Code Online (Sandbox Code Playgroud)

java double bigdecimal

10
推荐指数
2
解决办法
976
查看次数

Java浮点基元是否有IEEE 754标准实现?

如果Java使用IEEE 754标准来实现其浮点运算,我很感兴趣.在这里,我在文档中看到了这种情况:

IEEE 754-2008中定义的操作

据我所知,IEEE 754的积极方面是提高浮点算术的精度,所以如果我将使用doublefloat在Java中,计算的预先计算与在BigDecimal?如果不是在Math课堂上使用IEEE 754标准的重点是什么?

java floating-point double bigdecimal ieee-754

10
推荐指数
1
解决办法
5682
查看次数

Ruby BigDecimal Round:这是一个错误吗?

在编写一个带有表示为BigDecimal的值的测试时,我遇到了一些奇怪的东西并决定深入研究它.简而言之,当舍入到两位小数时,'0.00009'将返回0.01而不是0.00.真.这是我的脚本/控制台捕获:

>> bp = BigDecimal('0.09')
=> #<BigDecimal:210fe08,'0.9E-1',4(8)>
>> bp.round(2,BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.09
>> bp = BigDecimal('0.009')
=> #<BigDecimal:210bcf4,'0.9E-2',4(8)>
>> bp.round(2,BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.01
>> bp = BigDecimal('0.0009')
=> #<BigDecimal:2107a8c,'0.9E-3',4(12)>
>> bp.round(2,BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.0
>> bp = BigDecimal('0.00009')
=> #<BigDecimal:2103428,'0.9E-4',4(12)>
>> bp.round(2,BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.01
>> bp = BigDecimal('0.000009')
=> #<BigDecimal:20ff0f8,'0.9E-5',4(12)>
>> bp.round(2,BigDecimal::ROUND_HALF_DOWN).to_f
=> 0.0
Run Code Online (Sandbox Code Playgroud)

哦,如果我使用默认模式,我会得到相同的结果,如下所示:

>> bd = BigDecimal('0.00009')
=> #<BigDecimal:2152ed8,'0.9E-4',4(12)>
>> bd.round(2).to_f
=> 0.01
Run Code Online (Sandbox Code Playgroud)

这是我的版本:

ruby 1.8.6 (2008-03-03 patchlevel 114) [i686-darwin9.2.2]
Rails 2.3.4
Run Code Online (Sandbox Code Playgroud)

有没有人见过这样的东西?

ruby ruby-on-rails rounding bigdecimal

9
推荐指数
1
解决办法
2762
查看次数

在 Java 中将 BigDecimal 字段作为 JSON 字符串值返回

我有一个Get API返回一个JSON. 预期的格式是:

{
   "value1": "123.00",
   "value2": "23.00"
}
Run Code Online (Sandbox Code Playgroud)

这些值位于BigDecimal对象中:

public class Result{
    BigDecimal value1;
    BigDecimal value2;
    // getters and setters
}
Run Code Online (Sandbox Code Playgroud)

现在,当发出请求时,我创建Result对象并将这些值填充为BigDecimal,创建一个列表并返回。我收到的回复是:

{
   "value1": 123.00,
   "value2": 23.00
}
Run Code Online (Sandbox Code Playgroud)

这些值是正确的,但不是字符串。我怎样才能把它们做成绳子?

我知道我们可以转换BigDecimal为,String但我只有 BigDecimal 字段的对象,并且无法向其填充 String 值。

最后,列表是这样制作的:

List<MyObj> obj = Arrays.stream(myObj).collect(Collectors.toList());

    Result result = new Result();

    obj.forEach(t -> t.mergeToResult(result));  // mergeToResults does all the population like result.setValue1(new BigDecimal(123.00))

    return result;
Run Code Online (Sandbox Code Playgroud)

java rest json get bigdecimal

9
推荐指数
2
解决办法
4万
查看次数

进行 BigDecimal 比较的正确方法是什么

从最近开始,(我认为是因为我将代码转换为 kotlin,但不确定),Android Studio 在我编写时向我显示警告

if (myValue.compareTo(BigDecimal.ZERO) > 0)
Run Code Online (Sandbox Code Playgroud)

该消息显示“调用可替换为二元运算符”并将我的代码替换为

if (myValue > BigDecimal.ZERO)
Run Code Online (Sandbox Code Playgroud)

我注意到我也使用

if (myValue.compareTo(BigDecimal.ZERO) == 0
Run Code Online (Sandbox Code Playgroud)

但这一次我没有收到任何警告,如果我尝试更换它,它不起作用

if (myValue == BigDecimal.ZERO) // DOES NOT WORK
Run Code Online (Sandbox Code Playgroud)

为什么> ZERO有效但无效== ZERO?为什么我在 stackoverflow 上看到的每个线程(例如this)都推荐使用compareTobut > ZEROwork 并且是 Android Studio 推荐的?

android bigdecimal kotlin android-lint android-studio

9
推荐指数
1
解决办法
2940
查看次数