2009-10-27 30 views
29

Tôi có số 654987. ID của nó trong cơ sở dữ liệu. Tôi muốn chuyển nó thành một chuỗi. Giá trị Double.ToString (giá trị) thông thường làm cho nó thành dạng khoa học, 6.54987E5. Một cái gì đó tôi không muốn.Chuyển đổi từ đôi sang chuỗi Java mà không cần định dạng

Các chức năng định dạng khác Tôi tìm thấy kiểm tra vị trí hiện tại và thêm nghìn dấu phân cách phù hợp và như vậy. Kể từ khi một ID của nó, tôi không thể chấp nhận bất kỳ định dạng nào cả.

Cách thực hiện?

[Chỉnh sửa] Để làm rõ: Im đang làm việc trên một cơ sở dữ liệu đặc biệt xử lý tất cả các cột số làm tăng gấp đôi. Đôi là loại (số) duy nhất tôi có thể truy xuất từ ​​cơ sở dữ liệu.

+3

Xem câu trả lời hàng đầu trong, http://stackoverflow.com/questions/47045/sprintf-equivalent-in-java Trả lời cùng một câu hỏi. –

+1

654987 là số nguyên, không phải là số nguyên. Có phải ý của bạn là thứ khác? – Kai

+0

kiểm tra điều này: http: // stackoverflow.com/questions/1521122/java-conversion-a-đôi-to-a-string/1521324 # 1521324 – JuanZe

Trả lời

20

Sử dụng Long:

long id = 654987; 
String str = Long.toString(id); 
6

Nếu đó là một số nguyên trong cơ sở dữ liệu, hãy sử dụng số nguyên thay thế. Sau đó, nó sẽ định dạng như một số nguyên.

+0

Trong một thế giới hoàn hảo, tất nhiên, nhưng lý do cho câu hỏi là Im cố gắng làm việc xung quanh các giới hạn trong cơ sở dữ liệu; loại duy nhất (số) mà nó có thể lưu trữ là gấp đôi. – Mizipzor

2

gì về:

Long.toString(value) 

hoặc

new String(value) 
+4

Vui lòng không đề xuất '" "+ giá trị'! Đó là một hack và không truyền đạt ý định trong bất kỳ cách nào. Tôi muốn nói đó là phong cách tồi tệ nhất. –

+0

Ok :) Thay thế bằng "chuỗi mới (giá trị)". –

+0

Chuỗi mới (giá trị) sẽ có cùng vấn đề với câu hỏi được đề cập, nếu giá trị là 'double'. –

6

Làm thế nào về String.valueOf((long)value);

32

Dùng cố định NumberFormat (cụ thể là một DecimalFormat):

double value = getValue(); 
String str = new DecimalFormat("#").format(value); 

cách khác đơn giản đúc để int (hoặc long nếu phạm vi của các giá trị nó quá lớn):

String str = String.valueOf((long) value); 

Nhưng sau đó một lần nữa: tại sao bạn có một giá trị số nguyên (ví dụ: một số "toàn bộ") trong biến số double ngay từ đầu?

+1

Lý do tăng gấp đôi là Im làm việc với cơ sở dữ liệu xử lý tất cả các cột số làm tăng gấp đôi. – Mizipzor

+1

Nếu bạn truyền từ lâu đến đôi, đôi khi giá trị thay đổi. Ví dụ: '((dài) ((đôi) 25891000000002001L))' trở thành '25891000000002000L' – Vigneshwaran

1

Nếu những gì bạn đang lưu trữ là một ID (tức là một cái gì đó chỉ được sử dụng để xác định một tổ chức nào, mà thực tế số giá trị không có ý nghĩa) thì bạn không nên sử dụng đúp để lưu trữ nó. Chính xác gần như chắc chắn sẽ vít bạn.

Nếu cơ sở dữ liệu của bạn không cho phép giá trị số nguyên thì bạn nên lưu trữ ID dưới dạng chuỗi. Nếu cần thiết làm cho chuỗi biểu diễn chuỗi của số nguyên bạn muốn sử dụng. Với việc sử dụng thích hợp các số không đứng đầu, bạn có thể đặt thứ tự chữ cái của chuỗi giống như thứ tự số của các số nguyên.

Điều đó sẽ giúp bạn giải quyết vấn đề.

+0

Đáng buồn thay, cả cơ sở dữ liệu và các kiểu dữ liệu của nó được thiết lập. Cột tôi xử lý là gấp đôi và không có gì tôi có thể làm về nó. Khi cơ sở dữ liệu được đọc tôi tất nhiên nhanh chóng chuyển đổi nó thành một int để sử dụng nội bộ (hoặc một chuỗi như bạn đề nghị). Nó không thực sự quan trọng vì vấn đề là chuyển đổi thực tế, vì tôi không thể thay đổi nội dung hoặc bố cục của cơ sở dữ liệu. – Mizipzor

-3
double d = 56789; 
    String s = d+""; 
+1

Không gọi là Double.toString (d)? Theo mặc định, nếu Im không nhầm, hãy thêm cả ký hiệu khoa học và nghìn dấu tách (nếu cần). – Mizipzor

2

Ngoài ra bạn có thể sử dụng

double value = getValue(); 

NumberFormat f = NumberFormat.getInstance(); 
f.setGroupingUsed(false); 

String strVal = f.format(value); 
0

gì về Long.toString ((dài giá trị))?

Các vấn đề liên quan