这是我的代码,但它并不像在BigDecimal变量中那样接受字符串
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Scanner;
public class BigDesimal {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String[] s = new String[n];
for(int i=0; i<n; ++i) {
s[i] = in.next();
}
in.close();
BigDecimal max, min;
for(int i=0; i<n-1; i++) {
for(int j=i+1; j<n; j++) {
max = (new BigDecimal(s[i])).max(new BigDecimal(s[j]));
min = (new BigDecimal(s[i])).min(new BigDecimal(s[j]));
s[i] = max.toString();
s[j] = min.toString();
}
}
System.out.println(Arrays.toString(s));
}
}
我为以下输入运行此程序:*9
-100, 50, 0, 56.6, 90, 0.12, .12, 02.34, 000.000*
并且输出为:[90, 56.6, 50, 2.34, 0.12, 0.12, 0, 0, -100]
尝试类似的方法(未经测试):
List<String> sortedNumberStrings = Arrays.stream(numberStrings)
.map(NumberString::new)
.sorted(Comparator.reverseOrder())
.map(NumberString::getStringValue)
.collect(Collectors.toList());
System.out.println(sortedNumberStrings);
private static class NumberString implements Comparable<NumberString> {
private final String stringValue;
private final BigDecimal bigDecimalValue;
NumberString(String stringValue) {
this.stringValue = stringValue;
this.bigDecimalValue = new BigDecimal(stringValue);
}
public String getStringValue() {
return stringValue;
}
public BigDecimal getBigDecimalValue() {
return bigDecimalValue;
}
private static final Comparator<NumberString> NATURAL_ORDER_COMPARATOR =
Comparator.comparing(NumberString::getBigDecimalValue) // sort by value
.thenComparing(NumberString::getStringValue); // sort lexically
@Override
public int compareTo(NumberString other) {
return NATURAL_ORDER_COMPARATOR.compare(this, other);
}
@Override
public int hashCode() {
return Objects.hash(stringValue, bigDecimalValue);
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof NumberString)) {
return false;
}
NumberString that = (NumberString) o;
return Objects.equals(stringValue, that.stringValue) &&
Objects.equals(bigDecimalValue, that.bigDecimalValue);
}
@Override
public String toString() {
return stringValue;
}
}
您可以将内部循环体更改为:
String si = s[i], sj = s[j];
if (new BigDecimal(si).compareTo(new BigDecimal(sj)) < 0) {
s[i] = sj;
s[j] = si;
}
您不需要将转换后的大小数的结果存储回数组,但仅用于比较。
对于输入:
9, -100, 50, 0, 56.6, 90, 0.12, .12, 02.34, 000.000
我回来了:
90, 56.6, 50, 9, 02.34, .12, 0.12, 0, 000.000, -100
如果您不处理大量的大数字,正常的double
s就足够了:
if(Double.parseDouble(si) < Double.parseDouble(sj))
我正在使用Schembuf在带有套接字的计算机之间更改数据。要传输数据,我使用以下内容: 然而,我注意到Protobuf无法读取任何非int类型的接收数据(它将其分配给0)。果不其然,如果我不使用套接字,但试图用相同的代码片段返回消息,则会发生相同的情况: 我还指出: 那么,为什么我不能正确地将数据转换回字符串呢?如果这是一个参考问题,为什么protobuf不能读取字符数组数据或从字符数组转换的字
问题内容: 我有一个BigDecimal对象,我想将其转换为字符串。问题是我的值得到了分数,我得到了一个很大的数字(长度),例如,我只需要字符串中的原始数字即可: 输出为: 我需要把输出准确地放在字符串中 问题答案: 要获得准确的结果,您需要使用String构造函数或(它基于double的规范表示构造一个BigDecimal): 问题在于参数是a ,并且恰巧双精度不能正确表示。因此,“转换”为最接
我有一个HashMap与作为关键和一个值作为价值。 我的目标是通过降序值对Hashmap进行排序。应在
问题内容: 在我的GWT Web应用程序中,我有一个保存价格的文本框。如何将String转换为BigDecimal? 问题答案: 最简单的方法是创建一个继承ValueBox的新文本框小部件。如果您采用这种方式,则无需手动转换任何字符串值。ValueBox会处理所有这一切。 要输入BigDecimal值,您可以执行以下操作: 您的 BigDecimalBox.java : 然后你的 BigDecim
(“Samsung”,(“Galaxy”,20)) (“苹果”,(“iPhone”,40)) 我需要按照内部键的字母顺序对映射进行降序排序(在这个例子中是模型名) 我到目前为止的排序是这样的: Map.EntrySet().Stream.Foreach(entry->entry.GetValue().EntrySet().Stream().Sorted(Comparator.Comparative
问题内容: 我想在同一行上打印列表中的项目。我尝试过的代码: 输出= 我想输出到= 此代码仍在新行上打印我的模具的ASCII艺术表示。我想将其打印在同一行上,以节省空间并在一个屏幕上显示每个玩家的状态。 问题答案: 由于的元素是多行字符串,因此要比这更难。 首先,从每个字符串的开头删除换行符,并确保ASCII图形中的所有行都具有相同的长度。 然后尝试以下 如果您将描述的更改应用于ASCII艺术作品