0

我正在为我的计算机科学课程开发一个图形计算应用程序。我正在对向量进行许多计算,但有时我会遇到一些严重的截断,因为它是浮点算术。

问题是我尝试了一些将浮点数的小数位限制为例如 2 位的方法。以下是我尝试过的一些事情:

1 - 除以 100。这并不总是有效。实际上,这对我不起作用。

2 - 使用十进制格式。如果我的数字低于 1000,这种格式化方式效果很好。当我有 1003.3124 这样的数字时,它会格式化为 1,003.31 。由于此格式返回一个字符串,因此浮点数的解析函数由于 coma 而不起作用。我尝试将 DecimalFormatSymbols() setGroupingSeparator 设置为不同的字符,包括无空格和无长度字符( '\u0200B', '\u0000', ... ),但我得到了 '?' 而不是所需的字符。

3 - 将语言环境设置为美国。由于我的 Windows 运行的是巴西葡萄牙语(这里的点和 coma 有不同的文件:你的 1,300.42 是我们的 1.300,42!)我认为这很愚蠢,但这不是问题所在。这也没有解决任何问题。

4 - 获取字符串,删除逗号并返回浮点数。这就是我现在正在做的事情,它工作正常。但是,由于它是一个图形应用程序,我一直在对数字进行规范化。所以字符串解决方案总是太重了。

那么你知道解决这个问题的另一种方法吗?我需要最优化的一个。对不起,如果我不清楚。

4

3 回答 3

1

我建议您只使用float来计算,如果您想在您使用的点/逗号之后显示正好 2 位数字的数字String.format

尝试在 RAM 中进行优化计算可能不是一个好主意,因为浮点数已经是 Java 和硬件极其优化的原始类型。

于 2013-05-02T13:33:49.287 回答
0

目前尚不清楚您是在处理显示问题还是内部存储/计算。如果是后者,请阅读BigDecimal

如果您的问题只是显示问题,请使用适当的 DecimalFormat。我很不明白你所说的“由于这种格式返回一个字符串,浮点数的解析函数不起作用”是什么意思,你为什么要解析它?

于 2013-05-02T13:35:34.520 回答
0

解决此问题的一种方法是在乘以 100 后将浮点数转换为整数,然后将其转换为浮点数。例子:

float x = 20;
float y = (float)Math.PI;
float total = (float)(int)((x+y)*100)/100;

我不确定这在内存方面或速度方面的效果如何,但这肯定是一种方法。

于 2013-05-02T13:52:30.480 回答