簡體   English   中英

在保持尾隨零的同時舍入雙倍

[英]Round off a double while maintaining the trailing zero

這是我的函數來舍入一個最多兩位小數的數字但是當舍入數字是1.50時它似乎忽略了尾隨零並且只返回1.5

public static double roundOff(double number) {
        double accuracy = 20;
        number = number * accuracy;
        number = Math.ceil(number);
        number = number / accuracy;
        return number;
    }

因此,如果我發送1.499,則返回1.5,因為我想要1.50

這是一個印刷問題:

double d = 1.5;
System.out.println(String.format("%.2f", d)); // 1.50

1.5是盡管有效位數,但 1.50 (甚至1.5000000000000 )相同。

您需要將數字的與其顯示分開

如果您希望它輸出兩個十進制數字,只需使用String.format ,例如:

public class Test
{
    public static void main(String[] args) {
        double d = 1.50000;
        System.out.println(d);
        System.out.println(String.format("%.2f", d));
    }
}

哪個輸出:

1.5
1.50

如果您仍然需要一個能夠為您完成所有操作為您提供特定格式的函數,則需要返回以下內容:

public static String roundOff(double num, double acc, String fmt) {
    num *= acc;
    num = Math.ceil(num);
    num /= acc;
    return String.format(fmt, num);
}

並稱之為:

resultString = roundOff(value, 20, "%.2f"); // or 100, see below.

這將允許您以您想要的任何方式定制精度和輸出格式,但如果您想要簡單,您仍然可以對值進行硬編碼:

public static String roundOff(double num) {
    double acc = 20;
    String fmt = "%.2f";
    num *= acc;
    num = Math.ceil(num);
    num /= acc;
    return String.format(fmt, num);
}

最后一點:你的問題指出,要舍入到“兩位小數”,但完全不是那么回事凝膠與您使用的20的准確性,因為這將圓它到的下一個倍數1 / 20 如果你真的希望它四舍五入到兩位小數,那么你應該用於accuracy的值是100

您必須將其格式化為String才能執行此操作。 與大多數語言一樣,Java將降低尾隨零。

String.format("%.2f", number);

因此,您可以返回一個String (從double更改返回類型),或者只在需要使用上面的代碼顯示它時格式化它。 您可以閱讀JavaDoc for Formatter ,以了解小數位數,逗號位置等所有可能性。

如果你想要的是String輸出,你可以嘗試這個

double number = roundOff(1.499);//1.5

DecimalFormat decimalFormat = new DecimalFormat("#.00");
String fromattedDouble = decimalFormat.format(number);//1.50

函數roundOff與您在問題中提到的相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM