Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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_Integer_Rounding - Fatal编程技术网

Java 将双精度转换为整数

Java 将双精度转换为整数,java,integer,rounding,Java,Integer,Rounding,我想把一个double(例如值为7.90的price)转换成一个整数而不损失!我正在制作一个处理货币的程序,我必须将它们作为双精度输入,然后将它们转换为整数,这样我才能处理它们。例如,当我有7.90欧元,我想将其转换为美分时,它将显示为789美分,而不是790美分!请帮帮我:)提前谢谢 More specificaly the problem is that if it was a double it would originaly save 59.999999 instead of 60 数

我想把一个double(例如值为7.90的price)转换成一个整数而不损失!我正在制作一个处理货币的程序,我必须将它们作为双精度输入,然后将它们转换为整数,这样我才能处理它们。例如,当我有7.90欧元,我想将其转换为美分时,它将显示为789美分,而不是790美分!请帮帮我:)提前谢谢

More specificaly the problem is that if it was a double it would originaly save 59.999999 instead of 60
数据类型双变量无法准确存储某些值,60是其中的一个值,因此您应该a)使用不同的数据类型(float遇到相同的问题),或者b)在检查中使用容差来说明这一点

在您的情况下,您的变量显示为59.9999999,这仅仅是因为它是数据类型
double
可以达到60的最接近值。

一种可能的解决方案:

根本不要使用浮点数。不要说
1欧元=100*0.01欧元
,而是用美分计算:
1欧元=100美分
。如果你需要欧元,用美分作为整数计算,然后除以100

另一种可能性:


当计算大量金钱时,如果它不适合整数(甚至可能不适合长整数),可以使用
biginger
bigdecimic
类。这是处理金钱问题时通常也是更好的方法。精度和位数是任意的,但处理时间和内存使用可能更高。

1)请创建一个完整、最小且可验证的示例,2)请标记这是什么编程语言in@Magisch我对它进行了编辑,并说哪一个是主要的问题您可以使用英文变量名,至少在示例中是这样吗?即使只为自己编写代码,也建议使用英文名称,因为你几乎无法确定其他人是否需要阅读。@D.Everhard我写下了每个人的意思,我只是说,如果不必从代码中搜索变量的含义,它可以提高可读性。@Magish那么我应该怎么做才能将其保存为60?@KritonGeorgiou为什么一开始是双精度类型?@Magish因为练习要求我们以双精度形式申请资金,比如0,10,5等等,@KritonGeorgiou有什么原因不能允许双精度输入,然后乘以100,转换为int,然后在处理后再次显示为double?您可以使用舍入功能舍入到最近的高点。@Izuel这正是我的建议。浮点运算比普通整数运算的cpu开销要大得多。我就是这么做的!为了能够正确地分割数字,我把它们换算成了美分!问题是它能把60省下来,比如说59,我想你不明白我的意思。在您的问题中,您仍然在谈论“7.90欧元”,并且您将其作为双倍输入。不可能得到舍入误差,因为结果不应该是双倍的。除此之外,我还描述了两种可能的解决方案,所以“我就是这么做的”对我来说似乎很难理解。两种方法你都试过了吗?请注意,正如我在回答中所述,第二种方法是通常的和推荐的方法。