Hi tôi muốn làm tròn số tăng gấp đôi như thế này (đi từ zero) trong C++:C++ làm tròn số đi từ zero
4.2 ----> 5
5.7 ----> 6
-7.8 ----> -8
-34.2 ----> -35
cách hiệu quả để làm điều này là gì?
Hi tôi muốn làm tròn số tăng gấp đôi như thế này (đi từ zero) trong C++:C++ làm tròn số đi từ zero
4.2 ----> 5
5.7 ----> 6
-7.8 ----> -8
-34.2 ----> -35
cách hiệu quả để làm điều này là gì?
inline double myround(double x)
{
return x < 0 ? floor(x) : ceil(x);
}
Như đã đề cập trong the article Huppie cites, đây là tốt nhất thể hiện dưới dạng một mẫu mà làm việc trên tất cả các loại phao
Xem http://en.cppreference.com/w/cpp/numeric/math/floor và http://en.cppreference.com/w/cpp/numeric/math/floor
hay, nhờ Pax , phiên bản không hoạt động:
x = (x < 0) ? floor(x) : ceil(x);
cảm ơn bạn hoạt động – Emre
Cuộc gọi tốt, @Ruben, đã thêm một biến thể không hoạt động và đã cho bạn phiếu bầu. Hy vọng bạn không nhớ (chỉnh sửa, đó là, rõ ràng là bạn không nhớ bỏ phiếu). – paxdiablo
Đợi bản thân 3k - được thêm vào một định danh nội tuyến - tôi muốn tìm một tên tốt và dán nó vào một thư mục lib, có thể là mẫu cho tất cả các float - nó sẽ không tốn bất kỳ hiệu quả nào và cho phép bạn nhanh chóng cô lập hoặc thay đổi tất cả các tập quán của nó –
thử
double rounded = _copysign(ceil(abs(x)), x);
Có một bài viết hay về một vấn đề tương tự trên CPlusPlus.com. Các giải pháp dễ dàng cho vấn đề của bạn nên được một cái gì đó như thế này:
double customRound(double value) const {
return value < 0 ? floor(value) : ceil(value);
}
Một giải pháp tốt hơn là một trong những đề cập trong bài viết, trong đó sử dụng một mẫu:
//--------------------------------------------------------------------------
// symmetric round up
// Bias: away from zero
template <typename FloatType>
FloatType ceil0(const FloatType& value)
{
FloatType result = std::ceil(std::fabs(value));
return (value < 0.0) ? -result : result;
}
Tại sao nó không được gọi là customFloor - nó không phải là: P –
Tôi thấy trong bài viết được trích dẫn của nó được gọi là template
Bài viết thú vị, +1 –
@Ruben Bartelink: 'Round' nên tốt hơn:) ... btw .. Bạn có một số kỹ năng đánh máy ninja ;-) – Huppie
Từ (bản gốc) danh hiệu "C++ đúp làm tròn ", tôi nghĩ bạn có nghĩa là làm tròn một số hai lần, chỉ để chắc chắn :-) – paxdiablo
bạn là đúng: D thx để chỉnh sửa nó – Emre