我们是否可以BigDecimal仅使用Java API而不是定制的100行算法来计算Java中的平方根?
我在我的应用程序中使用BigDecimal作为我的数字,例如,使用JPA.我对"精确度"和"规模"这两个术语进行了一些研究,但我不明白它们究竟是什么.
任何人都能解释一下BigDecimal值的'precision'和'scale'的含义吗?
@Column(precision = 11, scale = 2)
Run Code Online (Sandbox Code Playgroud)
谢谢!
如何在Java中将BigDecimal乘以整数?我试过这个,但不正确.
import java.math.BigDecimal;
import java.math.MathContext;
public class Payment {
int itemCost;
int totalCost = 0;
public BigDecimal calculateCost(int itemQuantity,BigDecimal itemPrice){
itemCost = itemPrice.multiply(itemQuantity);
totalCost = totalCost + itemCost;
return totalCost;
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找将数字转换为BigDecimal的最佳方法.
这够好吗?
Number number;
BigDecimal big = new BigDecimal(number.toString());
Run Code Online (Sandbox Code Playgroud)
我们可以用这种toString()方法失去精确度吗?
我需要删除尾随零BigDecimal沿RoundingMode.HALF_UP.例如,
Value Output
15.3456 <=> 15.35
15.999 <=> 16 //No trailing zeros.
15.99 <=> 15.99
15.0051 <=> 15.01
15.0001 <=> 15 //No trailing zeros.
15.000000<=> 15 //No trailing zeros.
15.00 <=> 15 //No trailing zeros.
Run Code Online (Sandbox Code Playgroud)
stripTrailingZeros() 有效,但它会在类似的情况下返回科学记数,
new BigDecimal("600.0").setScale(2, RoundingMode.HALF_UP).stripTrailingZeros();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,它返回6E+2.我需要在JSF中的自定义转换器中使用它,这对最终用户来说可能很难看.那么,这样做的正确方法是什么?
在处理现实世界的货币价值时,我建议使用BigDecimal而不是Double.But我没有一个令人信服的解释,除了"通常是这样做".
你能否对这个问题嗤之以鼻?
实际上,我找到了可能的解决方案
//returns true
new BigDecimal("5.50").doubleValue() == new BigDecimal("5.5").doubleValue()
Run Code Online (Sandbox Code Playgroud)
当然,它可以通过类似的Math.abs (v1 - v2) < EPS方式进行改进,使比较更加健壮,但问题是这种技术是否可以接受或是否有更好的解决方案?
如果有人知道为什么java设计师决定以这种方式实现BigDecimal的平等,那么阅读它会很有趣.
我在 Vite 上使用 React 和 JavaScript 时安装了一个名为bigdecimal js的包。编译时,它在控制台上显示以下错误,并且应用程序未加载:
我的package.json:
{
"name": "settleup",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"@emotion/react": "^11.10.6",
"@emotion/styled": "^11.10.6",
"@mui/material": "^5.11.14",
"dayjs": "^1.11.7",
"firebase": "^9.18.0",
"js-big-decimal": "^1.4.1",
"numeral": "^2.0.6",
"react": "^18.2.0",
"react-datepicker": "^4.11.0",
"react-dom": "^18.2.0",
"react-hook-form": "^7.43.8",
"react-icons": "^4.8.0",
"react-router-dom": "^5.3.4",
"uuid": "^9.0.0"
},
"devDependencies": {
"@types/react": "^18.0.28",
"@types/react-dom": "^18.0.11",
"@vitejs/plugin-react": "^3.1.0",
"vite": "^4.2.0"
}
}
Run Code Online (Sandbox Code Playgroud)
和 Vite 配置:
import …Run Code Online (Sandbox Code Playgroud) 最近我尝试了解java.math.MathContext的使用但未能正确理解.它用于舍入java.math.BigDecimal.如果是,为什么不围绕十进制数字,甚至是尾数部分.
从API文档中,我发现它遵循规范ANSI X3.274-1996和ANSI X3.274-1996/AM 1-2000规范中指定的标准,但我没有让它们在线阅读.
如果您对此有任何想法,请告诉我.
任何人都可以推荐一种有效的方法来确定a是否BigDecimal是数学意义上的整数值?
目前我有以下代码:
private boolean isIntegerValue(BigDecimal bd) {
boolean ret;
try {
bd.toBigIntegerExact();
ret = true;
} catch (ArithmeticException ex) {
ret = false;
}
return ret;
}
Run Code Online (Sandbox Code Playgroud)
...但是如果有必要,我希望避免对象创建开销.以前我正在使用bd.longValueExact()哪个会避免创建一个对象,如果BigDecimal它在内部使用它的紧凑表示,但显然会失败如果值太大而不适合长.
任何帮助赞赏.
bigdecimal ×10
java ×9
precision ×2
double ×1
equals ×1
javascript ×1
jpa ×1
math ×1
mathcontext ×1
numbers ×1
reactjs ×1
scale ×1
square-root ×1
vite ×1