diff --git a/source/simple/geom/vector.hpp b/source/simple/geom/vector.hpp
index 07f5b7e386c7077d53fb1e95bd738d5c867bf5e8..88bdde3237b0a980325451ae904ae29b2c6eb03f 100644
--- a/source/simple/geom/vector.hpp
+++ b/source/simple/geom/vector.hpp
@@ -431,6 +431,14 @@ SIMPLE_GEOM_VECTOR_DEFINE_COMPARISON_OPERATOR(<=, bool_vector)
 			return *this;
 		}
 
+		constexpr vector& trunc()
+		{
+			using std::trunc;
+			for(auto&& coord : raw)
+				coord = trunc(coord);
+			return *this;
+		}
+
 		constexpr vector& abs()
 		{
 			using std::abs;
@@ -652,6 +660,15 @@ SIMPLE_GEOM_VECTOR_DEFINE_COMPARISON_OPERATOR(<=, bool_vector)
 		return v;
 	}
 
+	template <typename C, size_t D, typename O>
+	[[nodiscard]]
+	constexpr
+	vector<C,D,O> trunc(vector<C,D,O> v)
+	{
+		v.trunc();
+		return v;
+	}
+
 	template <typename C, size_t D, typename O>
 	[[nodiscard]]
 	constexpr
diff --git a/unit_tests/point.cpp b/unit_tests/point.cpp
index 126809d55a8ad7161694cd345a4ad25a6286177b..4fbda4090a067c04a9517f97bf678778696ac87a 100644
--- a/unit_tests/point.cpp
+++ b/unit_tests/point.cpp
@@ -344,11 +344,14 @@ void Algorithms()
 	assert( int4(-1, 3, -3, 1) == p3);
 
 	float4 fp (1.1f, 3.4f, 4.5f, 8.9f);
+	assert( float4(1.f, 3.f, 4.f, 8.f) == trunc(fp) );
 	assert( float4(1.f, 3.f, 4.f, 8.f) == floor(fp) );
 	assert( float4(2.f, 4.f, 5.f, 9.f) == ceil(fp) );
 	assert( float4(1.f, 3.f, 5.f, 9.f) == round(fp) );
 
 	float4 fp2;
+	(fp2 = fp).trunc();
+	assert( float4(1.f, 3.f, 4.f, 8.f) == fp2 );
 	(fp2 = fp).floor();
 	assert( float4(1.f, 3.f, 4.f, 8.f) == fp2 );
 	(fp2 = fp).ceil();
@@ -356,6 +359,21 @@ void Algorithms()
 	(fp2 = fp).round();
 	assert( float4(1.f, 3.f, 5.f, 9.f) == fp2 );
 
+	fp = float4(1.1f, -3.4f, 4.5f, -8.9f);
+	assert( float4(1.f, -3.f, 4.f, -8.f) == trunc(fp) );
+	assert( float4(1.f, -4.f, 4.f, -9.f) == floor(fp) );
+	assert( float4(2.f, -3.f, 5.f, -8.f) == ceil(fp) );
+	assert( float4(1.f, -3.f, 5.f, -9.f) == round(fp) );
+
+	(fp2 = fp).trunc();
+	assert( float4(1.f, -3.f, 4.f, -8.f) == fp2 );
+	(fp2 = fp).floor();
+	assert( float4(1.f, -4.f, 4.f, -9.f) == fp2 );
+	(fp2 = fp).ceil();
+	assert( float4(2.f, -3.f, 5.f, -8.f) == fp2 );
+	(fp2 = fp).round();
+	assert( float4(1.f, -3.f, 5.f, -9.f) == fp2 );
+
 	int4 p4 (2, 6, 3, 0);
 	assert( p4.magnitude() ==  49);
 	assert( p4.quadrance() ==  49);