Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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中以String.format(“%.2f”,doubleValue)进行舍入_Java_String_Floating Point_Format - Fatal编程技术网

防止在Java中以String.format(“%.2f”,doubleValue)进行舍入

防止在Java中以String.format(“%.2f”,doubleValue)进行舍入,java,string,floating-point,format,Java,String,Floating Point,Format,如何防止String.format(“%.2f”,doubleValue)从四舍五入(向上取整算法)而不是仅仅截断它 e、 g 格式化后 doubleValue = 123.46 我只想丢弃最后一个数字 123.45 我知道还有其他方法可以做到这一点,我只想知道使用String.format是否可以做到这一点。您始终可以设置舍入模式: doubleValue = 123.459 doubleValue = Math.ceil(doubleValue*100)/100; 然后使用Strin

如何防止
String.format(“%.2f”,doubleValue)从四舍五入(向上取整算法)而不是仅仅截断它

e、 g

格式化后

doubleValue = 123.46
我只想丢弃最后一个数字

123.45

我知道还有其他方法可以做到这一点,我只想知道使用String.format是否可以做到这一点。

您始终可以设置舍入模式:

doubleValue = 123.459
doubleValue = Math.ceil(doubleValue*100)/100;

然后使用String.Format() 默认情况下,甚至会使用HALF_,但您可以将其更改为天花板

另一个没有那么灵活的方法是(但这不是你所问的):


看来答案是一个大大的否定。 “然后将使用向上取整算法对值进行取整”


我觉得他们这样做很奇怪,因为NumberFormatter允许您设置RoundingMode。但正如你所说,还有其他的方法。显然最简单的方法是先从值中减去.005。

使用String.format(“%.2f”,doubleValue-.005)

如果要截断,是否要使用
floor
表示正值,使用
ceil
表示负值?如果小数点左侧的数字可以超过3位,该怎么办?另外,是否可以直接在将其转换为字符串的双变量上使用它,而不是创建新对象?将来引用这是错误的。如果小数位数小于6,则使用向上舍入的一半,使用其他明智的半舍五入偶数舍入。我觉得这很荒谬!我已经阅读了javadocs并做了一些研究,但还没有找到一种方法来更改String.format()函数中的RoundingMode。有人能进一步解释吗?这应该是公认的答案@DimitryK的回答意味着您可以让String.format()截断而不是取整,这是不正确的。请注意这种方法
String.format(“%.2f”,1.05-.005)
导致
1.04
,可能是由于浮点不准确。
doubleValue = 123.459
doubleValue = Math.ceil(doubleValue*100)/100;
DecimalFormat df = new DecimalFormat("###.##");
df.format(123.459);