将双精度转换为双精度,带一位小数和一位小数?

Posted

技术标签:

【中文标题】将双精度转换为双精度,带一位小数和一位小数?【英文标题】:Convert double to double with one decimal point and one decimal place? 【发布时间】:2015-11-19 17:14:21 【问题描述】:

我想以一位小数点和一位小数位的格式将任何双精度数舍入为双精度数,因此 29575.347434 将是 2.3。

尝试使用 decimalFormat 执行此操作,但是当我尝试 #.# 时,我只得到一个格式为 29575.3 的字符串,并且我不知道如何在保持我的值双倍的同时切断所有小数点。

【问题讨论】:

您可能不得不将其视为一个字符串——29575.347434 不会以任何标准数学方式舍入到 2.3....至于保持双精度,只需将其解析回来。 那么你想得到最左边的整数位,后跟一个小数点,然后是最左边的小数位? @Cinnam 是的,完全一样 【参考方案1】:

你可以得到String的号码,取第一个数字和'.'之后的数字。对于非负数,

String s = Double.toString(29575.347434);
double d = Double.parseDouble(s.charAt(0) + "." + s.charAt(s.indexOf('.') + 1));
System.out.println(d); // 2.3

如果数字可以是负数,则必须更正代码中可能出现的减号。

【讨论】:

我认为这不会将数字的小数部分四舍五入,只是修剪它。 @KyleGowen 你是对的,但这似乎是 OP 想要的。 哦。他说他想完成他的替补。所以我认为他想要四舍五入。【参考方案2】:

您可以通过使用模运算符 % 来完成此操作。

您的十进制格式似乎正在使用#.#。这将为您提供整数和一位小数。然后你可以做你的数字 29575.3 % 10 并得到 5.3。

试试这段代码看看:

System.out.println(29575.3d % 10);

【讨论】:

【参考方案3】:

尝试以下方法:

Number(parseFloat(29575.347434).toFixed(1))

您也可以传递一个 string ,因为parseFloat() 会将其转换为 number,然后转为希望的 decimal(输出为 string),然后通过函数Number() 转换回decimal

为我工作。

【讨论】:

以上是关于将双精度转换为双精度,带一位小数和一位小数?的主要内容,如果未能解决你的问题,请参考以下文章

将双精度数转换为字符串时在小数点前保留零

类型转换

将双精度数舍入到 x 有效数字

在 C++ 中使用 boost::lexical_cast 将双精度转换为字符串?

是否可以将两位小数分配给双精度

变体浮点到双精度值转换,舍入到小数点后 1 位 [重复]