我正在尝试让我的数字将第一个字符移动到末尾。
例如,我会有我的双d。
double d = 12345.6;
double result = 2345.61;
目前,我使用:删除d的第一个字符:
d = d % (int) Math.pow(10, (int) Math.log10(d));
但我不知道如何存储我删除的字符,所以我可以把它放在最后。我知道我可以将d转换为数组或字符串,但如果可能的话,我希望将其保留为双精度。
我使用Instant.now从纳秒时钟获取双精度数,所以我可以保证它从一个8位正整数开始,我首先添加.0,这样我就可以使其成为双精度数。我知道我可以只使用字符串(就像我在文章中提到的那样),但我想知道是否有一种方法可以不进行转换。
感谢您的帮助!
(这是我的第一篇文章,如果不好,我深表歉意)
发布于 2018-08-31 01:00:33
这是一个相当棘手的问题,这不是一个有效的答案,但它非常接近。我遇到的唯一麻烦是java将小数添加到双精度数的末尾,因为它不能很好地表示数字。我的解决方案可能会让你走上正确的道路。appendChar
搞砸了,因为它把数字加到了双精度数的末尾,而不是这个问题。
public static void main(String[] args) {
double test = 4234.1211;
boolean hasDecimals = test % 1 > 0;
double[] leadChar = getLeadDigitAndMulti(test);
double appendedValue = appendLeadChar(test, (int) leadChar[1], hasDecimals);
}
public static double[] getLeadDigitAndMulti(double value) {
double[] result = new double[2];
int multiplier = 10;
int currentMultiplier = 1;
while (value > currentMultiplier) {
currentMultiplier *= multiplier;
}
currentMultiplier /= multiplier;
double trail = value % (currentMultiplier);
result[0] = currentMultiplier;
double lead = value - trail;
lead /= currentMultiplier;
result[1] = lead;
return result;
}
public static double appendLeadChar(double value, int leadChar, boolean hasDecimals) {
if (!hasDecimals) {
return (value * 10) + leadChar;
}
int multiplier = 10;
double currentMultiplier = 1;
while (value > 0) {
value %= currentMultiplier;
currentMultiplier = currentMultiplier / multiplier;
}
return 0;
}
https://stackoverflow.com/questions/52087016
复制相似问题