【发布时间】:2013-03-04 12:33:34
【问题描述】:
我想截断双精度。
例如
double d=3.123456789087654;
如果我想将它截断到小数点后的第 10 位 结果应该是
result: 3.1234567890
结果我不需要四舍五入值
我尝试了自己的功能
static double truncateDouble(double number, int numDigits) {
double result = number;
String arg = "" + number;
int idx = arg.indexOf('.');
if (idx!=-1) {
if (arg.length() > idx+numDigits) {
arg = arg.substring(0,idx+numDigits+1);
result = Double.parseDouble(arg);
}
}
return result ;
}
但没有得到我想要的适当结果.. 谁能帮我解决我的问题。
java是否支持这种支持截断不四舍五入的函数??
【问题讨论】:
-
只是出于好奇,您为什么要失去精度?
-
我站在这毫无意义的一边。除了输出数字时,您是否有在某个点舍入/截断的用例?另外,虽然我有预感 NPE 是正确的,因为“适当的”结果是一个无法准确表示的数字,但你能说出你的代码的实际问题是什么吗? IE。哪个输入的错误结果以及您的预期结果是什么?
-
@millimoose:我的问题很简单..我想在小数点后的特定 no 之后将 double
-
@krishnaChandra 不,我的意思是你最终想要完成什么。 为什么你想做这件事?也许有更好的方法来实现这一点。请记住,
double中没有“小数点后的数字”之类的东西 - 它在内存中表示为符号+尾数+指数,后者是以 2 为底的数字,而不是 10。你可以最接近没有BigDecimals 是乘以 10^digits,ceil/floor ,然后再除,最后得到什么。 -
@krishnaChandra 即使是规模有限的
BigDecimals 也不是一个好的答案,因为您使用这些进行的任何和所有数学都会扭曲结果以奇怪的方式,如果你不知道舍入误差复合是什么以及它是如何工作的(我肯定不记得)以及为什么你故意在计算中引入显着的舍入误差,这可能是一个坏主意。所以我会回答“我想在计算过程中对数字进行四舍五入,我该怎么做?”是“不,你不知道,除非你能解释原因。”
标签: java