java中的舍入双[重复]
Posted
技术标签:
【中文标题】java中的舍入双[重复]【英文标题】:rounding double in java [duplicate] 【发布时间】:2013-06-06 17:25:12 【问题描述】:我有一个存储在文本文件中的双值对角矩阵。
size(file)~410 Mo
我想通过舍入我的双精度值来减小大小。
如果它是一个好主意,如何在java中做到这一点
0.1706524958886193=>0.17
我需要稍后在matlab中使用这个文件
当我尝试时
dlmread(file) 我内存不足错误
【问题讨论】:
您是将此文件存储为文本还是直接二进制文件? 作为文件文本(.txt)//我需要稍后在matlab程序中使用它 只需使用例如printf
根据需要进行格式化。
查看DecimalFormat
类来格式化你的双打。
@eternay 他想要四舍五入
【参考方案1】:
如果对值进行四舍五入,则会丢弃精度。这可能会改变您将获得的结果。
更好的方法是只存储对角线项目。存储 n^2-n 个非对角线零是没有意义的。使用 diag 函数将向量转换为对角矩阵。 http://www.mathworks.es/es/help/matlab/ref/diag.html
更高效:以二进制格式而不是文本存储数字。
【讨论】:
+1 因为我同意减少到 2 位小数可能会改变结果。 好主意,但是 .... 函数 diag =out of memory 也有同样的问题 那么矩阵太大了,无法使用当前分配给 Matlab 的内存进行处理。这里有一个关于如何为 Matlab 提供更多内存和如何减少内存消耗的提示的页面:mathworks.es/es/help/matlab/matlab_prog/… 是的,谢谢,我问过这个问题here:【参考方案2】:使用DecimalFormat
类根据您的需要格式化double
值。例如,如果您只想保留小数点后 2 位使用,"#0.00
等等。 DecimalFormat#format
类返回 String
输出,您可以使用它来实例化 Double
值。
来自
import java.text.DecimalFormat;
public class Tester
public static void main(String arg[]) throws Throwable
double bigDouble=0.1706524958886193;
DecimalFormat df=new DecimalFormat("#0.00");
String numberString=df.format(bigDouble);
double smallDouble=new Double(numberString);
System.out.println(smallDouble);
希望这会有所帮助...
【讨论】:
+1 因为它是整数的最佳解决方案。 +1 请在NumberFormat中添加实现的方法,否则必须使用BigDecimal true is@EJP @mKorbel 请添加?我没听懂你……你想让我编辑我的答案还是? 不是我的链接答案中没有任何内容,也没有编辑某些内容,您对我的 cmets 有任何问题吗?【参考方案3】:除非我误解了这个问题,否则你可以这样做:
double value = 0.1706524958886193;
value = (double)((int)(value*100))/100; // returns 0.17
【讨论】:
那将是截断。提问者似乎想要四舍五入 另外,在大多数情况下,这不会产生“准确”的结果...以上是关于java中的舍入双[重复]的主要内容,如果未能解决你的问题,请参考以下文章