Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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,嘿,伙计们,我想把小数点后三位四舍五入 我使用了以下代码 this.hours = Round(hours + (mins / 60), 3); 但它不起作用。 我哪里出错了? 谢谢首先,您的所有变量都是int,因此除法的结果也是int,因此不需要进行任何取整 然后查看:您可以使用此功能: public static double Round(double number, int decimals) { double mod = Math.pow(10.0, decimals

嘿,伙计们,我想把小数点后三位四舍五入

我使用了以下代码

this.hours = Round(hours + (mins / 60), 3);
但它不起作用。 我哪里出错了?
谢谢

首先,您的所有变量都是
int
,因此除法的结果也是
int
,因此不需要进行任何取整


然后查看:

您可以使用此功能:

 public static double Round(double number, int decimals)
    {
    double mod = Math.pow(10.0, decimals);
    return Math.round(number * mod ) / mod;
    }

如果
mins
是一个整数,您必须除以60.0才能得到一个可以四舍五入的浮点数

如果
mins
是一个整数,那么
mins/60
将得到一个整数除法,结果总是0

尝试从
60
更改为
60.0
,以确保该除法被视为浮点除法

例如:

int hours = 5;
int mins = 7;

// This gives 5.0
System.out.println(Math.round(1000 * (hours + (mins / 60  ))) / 1000.0);

// While this gives the correct value 5.117.           (.0 was added)
System.out.println(Math.round(1000 * (hours + (mins / 60.0))) / 1000.0);
尝试使用like follow

this.hours = Round(hours + (((double)mins) / 60), 3); 

你不能。double没有小数位数,因为它们是二进制的,而不是十进制的。您可以将其转换为具有小数位数的数字,即以10为基数的数字,例如BigDecimal,并调整精度,或者您可以使用java.text(例如DecimalFormat)或适当的System.out.printf()字符串设置输出格式。

您得到了什么结果?“小时”和“分钟”以及“这个.小时”是什么类型?小时和/或分钟需要加倍。是吗?你怎么知道double和mins是int?这更像是直觉。变量名指向整数值(小时和分钟),认为除法返回双精度也是一个常见错误。不理解您的答案,上面的函数适用于主题启动者,所以我不明白你的意思…如果答案对启动者有用,你给我一个否决票,这不是有点愚蠢吗?OP通常不是最好的裁判。请参阅,以反证您的答案。OP只是想从
1.333333
变为
1.333
?是的,一个基数为2的双精度不能容纳这两个值中的任何一个。@downvoter请解释,并请查看证据。计算机存储的数字代表一个数学数字。讨论这个数字的十进制表示法是很好的,删除除三个小数以外的所有小数点是一个定义良好的操作。事实上,你可能无法将结果存储在普通的双精度中,但我相信OP在这一点上所需的四舍五入是可以接受的。(嘿,你为什么不在问题下面的评论部分问他。)总之,我认为你因为你的“你不能”部分而获得了否决票,您可能因为对问题的误解而写了这封信。@aioobe由于我给出的原因,答案是正确的,但您没有提到。只有3位小数的分数可以准确地存储在双精度中,即0.125、0.375、0.625和0.875。其他都是近似值。将浮点数四舍五入到小数点后3位不仅不正确,而且毫无意义。请参阅链接以获取证据。如果你对我的证据有异议,那就让我们来吧。至少,告诉我们十进制数字在浮点值中存储的确切位置。没有这些,你只是在浪费时间。