返回不带尾随零的双精度类型

huangapple go评论95阅读模式
英文:

Return double type without trialing zero

问题

我正试图返回双精度/浮点值,但不带有尾随添加的零。

我已经使用了NumberFormat、DecimalFormat,但一旦我将双精度或浮点数转换为结果,它就会添加尾随零(这是预期的)。我想知道是否有方法可以阻止这种情况。

  1. private Double format(double input) {
  2. NumberFormat nf = NumberFormat.getIntegerInstance(Locale.US);
  3. Double result = null;
  4. BigDecimal bd = new BigDecimal(input);
  5. if (bd.intValue() > 99) {
  6. //(不想在这里添加尾随零)
  7. return (double) bd.intValue();
  8. } else {
  9. nf.setMinimumFractionDigits(1);
  10. nf.setMaximumFractionDigits(1);
  11. result = Double.parseDouble(nf.format(bd.doubleValue()));
  12. }
  13. return result;
  14. }

附注:我在这里不是试图返回字符串值。

英文:

I am trying to return the double/float value but without the trailing zero added to it.

I've used NumberFormat, DecimalFormat but once I cast double or float to the result, it will add trailing zero(which is expected). I was wondering if there is a way to prevent this.

  1. private Double format (double input) {
  2. NumberFormat nf = NumberFormat.getIntegerInstance(Locale.US);
  3. Double result = null;
  4. BigDecimal bd = new BigDecimal(input);
  5. if(bd.intValue() > 99){
  6. //(don't want to add trailing zeros here)
  7. return (double)bd.intValue();
  8. }else{
  9. nf.setMinimumFractionDigits(1);
  10. nf.setMaximumFractionDigits(1);
  11. result = Double.parseDouble(nf.format(bd.doubleValue()));
  12. }
  13. return result;

P.S. I am not trying to return String value here.

答案1

得分: 1

"尾随零" 只涉及浮点数或双精度数的字符串表示。

由于尾随零不影响数字的值,所以存储在浮点数或双精度中的数据保持不变。例如,"3.4" 和 "3.4000" 是同一个数字,它们只是这个数字的两种不同表示,就像 "3.4e+00" 仍然是显示同一数字的另一种方式。

英文:

The "trailing zeros" is only about the string representation of a float or double number.

As the trailing zeros do not affect the value of a number, the data stored in the float or double remains the same. For example, "3.4" and "3.4000" are the same number, it's only two different representations of this number, like "3.4 e+00" is still another way to display that very same number.

答案2

得分: 1

你可以使用Java中的内置方法**stripTrailingZeros**,该方法返回一个在去除尾部零后的BigDecimal

  1. Double.valueOf(bd.stripTrailingZeros().toPlainString());
英文:

You can Use stripTrailingZeros which inbuilt method in Java that returns a BigDecimal after remove trailing zero.

  1. Double.valueOf(bd.stripTrailingZeros().toPlainString());

答案3

得分: 0

如果将一个 int 值赋值给一个 double 变量,它默认情况下将始终以尾随零的形式表示。你有两个选择:

  1. 将其格式化为你想要的字符串。
  2. 将其转换为 BigDecimal,然后使用 BigDecimal#stripTrailingZeros 方法获取一个没有尾随零的 BigDecimal
  1. import java.math.BigDecimal;
  2. public class Main {
  3. public static void main(String[] args) {
  4. double x = 5;
  5. System.out.println(x);
  6. BigDecimal y = BigDecimal.valueOf(x).stripTrailingZeros();
  7. System.out.println(y);
  8. }
  9. }

输出:

  1. 5.0
  2. 5
英文:

If you assign an int value to a double variable, it will always be represented with a trailing zero by default. You have two choices:

  1. Format it into a string in whichever you want.

  2. Convert it into a BigDecimal and then use BigDecimal#stripTrailingZeros to get a BigDecimal without the trailing zero.

    1. import java.math.BigDecimal;
    2. public class Main {
    3. public static void main(String[] args) {
    4. double x = 5;
    5. System.out.println(x);
    6. BigDecimal y = BigDecimal.valueOf(x).stripTrailingZeros();
    7. System.out.println(y);
    8. }
    9. }

Output:

  1. 5.0
  2. 5

huangapple
  • 本文由 发表于 2020年8月19日 02:35:32
  • 转载请务必保留本文链接:https://go.coder-hub.com/63474699.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定