Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将货币/货币转换为美分,反之亦然_Java - Fatal编程技术网

Java 将货币/货币转换为美分,反之亦然

Java 将货币/货币转换为美分,反之亦然,java,Java,由于圆问题,我正在尝试在数据库中存储cent int 将双倍货币价值转换为美分以及将双倍货币价值转换为美分的算法是什么?这既快速又简单: double val = 1.45; int cents = (int)(val * 100); 或 如果有以下双精度值 你可以用几美分买到它 int allCents = (int)(allTheMoney * 100); // or using long long allCents = Math.round(allTheMoney * 100); 更多

由于圆问题,我正在尝试在数据库中存储cent int

将双倍货币价值转换为美分以及将双倍货币价值转换为美分的算法是什么?

这既快速又简单:

double val = 1.45;
int cents = (int)(val * 100);

如果有以下双精度值

你可以用几美分买到它

int allCents = (int)(allTheMoney * 100);
// or using long
long allCents = Math.round(allTheMoney * 100);

更多的细节/背景会有所帮助。你能提供一个双重存储货币价值的例子吗?货币到美分?美元?你的意思是,乘以100并取整?你知道你永远不应该以浮点类型存储货币值吗?@JanDvorak如果他总是拥有整个centsAlas,那就更容易了,这是不可避免的第一个得到答案的种族。@ITroubs谁也不应该回答IMO。比如,帮助吸血鬼警觉。阅读关于@ITroubs answer的评论。它也适用于你的。更新显示@ITroubs对Math.round的建议。这不是round。由于浮点值的存储方式,实际的双精度值可能是1.4499999,这将转换为144美分。我知道。这也是为什么在钱的问题上没有人应该使用double的原因……所以如果我没记错的话,请使用val+0.005D*100D。@LeeMeador为什么不使用Math.roundval*100?这将是更好的方法。那将是好的,但速度较慢,我怀疑。这个问题的原因是,当我们将1/50.2表示为二进制分数时,我们得到0.01100101110。。。0110不能用有限位数表示的重复。一个double将其值存储为二进制分数,20美分是1/5美元,而这个或“倍数”如40、10和5会产生这种问题,位丢失。
double allTheMoney = 123.54; // as in $123 + 54 cents
int allCents = (int)(allTheMoney * 100);
// or using long
long allCents = Math.round(allTheMoney * 100);